4

しばらく前に、XP プラットフォームでいくつかの PHP 拡張ライブラリ (C/C++) をコンパイルしました。ソースを Ubuntu ボックスに移動したので、Linux ボックスで使用するライブラリをビルドしたいと考えています。

ただし、いくつかの障害に遭遇しました。

  1. phpize が見つからない (php5dev パッケージをインストールした後でも)
  2. スケルトン スクリプト/ファイルを生成するための ext_skel が見つかりません

[編集]

Pascal Martinとこの質問のおかげで、小さなライブラリの 1 つをビルドしてテストすることができました。他のライブラリに進む前に、.m4 ファイルの内容を再確認したいだけです (形式に慣れていないため)。

これは、自動生成された .m4 ファイルの内容です。この形式に精通している方であれば、その意味を説明できますか?これにより、ファイルの正しいセクションのコメントを解除したことを二重に確認できます。

config.m4 ファイルの内容は、すべての詳細で以下に表示されます。

dnl $Id$
dnl config.m4 for extension tanlib

dnl Comments in this file start with the string 'dnl'.
dnl Remove where necessary. This file will not work
dnl without editing.

dnl If your extension references something external, use with:

dnl PHP_ARG_WITH(tanlib, for tanlib support,
dnl Make sure that the comment is aligned:
dnl [  --with-tanlib             Include tanlib support])

dnl Otherwise use enable:

PHP_ARG_ENABLE(tanlib, whether to enable tanlib support,
dnl Make sure that the comment is aligned:
[  --enable-tanlib           Enable tanlib support])

if test "$PHP_TANLIB" != "no"; then
  dnl Write more examples of tests here...

  dnl # --with-tanlib -> check with-path
  dnl SEARCH_PATH="/usr/local /usr"     # you might want to change this
  dnl SEARCH_FOR="/include/tanlib.h"  # you most likely want to change this
  dnl if test -r $PHP_TANLIB/$SEARCH_FOR; then # path given as parameter
  dnl   TANLIB_DIR=$PHP_TANLIB
  dnl else # search default path list
  dnl   AC_MSG_CHECKING([for tanlib files in default path])
  dnl   for i in $SEARCH_PATH ; do
  dnl     if test -r $i/$SEARCH_FOR; then
  dnl       TANLIB_DIR=$i
  dnl       AC_MSG_RESULT(found in $i)
  dnl     fi
  dnl   done
  dnl fi
  dnl
  dnl if test -z "$TANLIB_DIR"; then
  dnl   AC_MSG_RESULT([not found])
  dnl   AC_MSG_ERROR([Please reinstall the tanlib distribution])
  dnl fi

  dnl # --with-tanlib -> add include path
  dnl PHP_ADD_INCLUDE($TANLIB_DIR/include)

  dnl # --with-tanlib -> check for lib and symbol presence
  dnl LIBNAME=tanlib # you may want to change this
  dnl LIBSYMBOL=tanlib # you most likely want to change this

  dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
  dnl [
  dnl   PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $TANLIB_DIR/lib, TANLIB_SHARED_LIBADD)
  AC_DEFINE(HAVE_TANLIBLIB,1,[ Whether you have tanlib])
  dnl ],[
  dnl   AC_MSG_ERROR([wrong tanlib lib version or lib not found])
  dnl ],[
  dnl   -L$TANLIB_DIR/lib -lm -ldl
  dnl ])
  dnl
  dnl PHP_SUBST(TANLIB_SHARED_LIBADD)

  PHP_NEW_EXTENSION(tanlib, tanlib.c, $ext_shared)
fi 

誰かが上記を理解していますか?

ところで、上記の config.m4 ファイルは Autoconf 2.50 を使用して生成されました (私はここのドキュメントも見たばかりで、ゆっくりと消化しています。

4

2 に答える 2

0

フォローアップの質問に答えるにdnlは、ファイル内の行コメント マーカーで.m4あるため、これらの行は現在何もしていません。ほとんどの場合、外部ライブラリを使用している場合にのみ関連するため (慣例により、--with-myextensionではなく configure オプションを使用します--enable-myextension)、おそらく問題ありません。

したがって、上記のファイル (リビジョン 3 以降) は次と同等です。

PHP_ARG_ENABLE(tanlib, whether to enable tanlib support,
[  --enable-tanlib           Enable tanlib support])

if test "$PHP_TANLIB" != "no"; then
  AC_DEFINE(HAVE_TANLIBLIB,1,[ Whether you have tanlib])  
  PHP_NEW_EXTENSION(tanlib, tanlib.c, $ext_shared)
fi 

したがって、このディレクトリで次の操作を行うと、動作するはずです (これを確認するための適切な Linux マシンが手元にないと思います)。

phpize
./configure --enable-tanlib
make
make install

最後に、拡張機能が で有効になっていることを確認し/etc/php5/conf.dます。

sudo /etc/init.d/apache2 restart拡張子の変更を有効にするには、apache ( ) を再起動する必要があることに注意してください。

于 2010-02-28T09:26:43.040 に答える