4

不久前,我在我的 XP 平台上编译了一些 PHP 扩展库(在 C/C++ 中)。我现在已经将源代码移到了我的 Ubuntu 机器上,并且想要构建库以在我的 Linux 机器上使用。

但是,我遇到了许多障碍:

  1. 我找不到 phpize(即使在安装了 php5dev 包之后)
  2. 我找不到 ext_skel 来生成骨架脚本/文件

[编辑]

感谢 Pascal Martin 和这个问题,我设法构建和测试了我的一个较小的库。在继续使用其他库之前,我只想仔细检查 .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

2

在我的 Ubuntu 计算机上,phpize 位于:

$ which phpize
/usr/bin/phpize


并且ext_skel应该在“ ext”目录中,在 PHP 源代码中,您可以通过 SVN 获取。

这是ext目录:您可以在此处http://svn.php.net/viewvc/php/php-src/trunk/ext/
查看脚本的内容。

README.EXT_SKEL就在trunk/.


如果你是一个 git 用户,在 github 上有一个 SVN 的镜像:http: //github.com/php/

于 2010-02-15T17:34:44.920 回答
0

要回答您的后续问题,dnl.m4文件中的行注释标记,因此这些行目前没有做任何事情。这可能没问题,因为它们大多仅在您使用外部库时才相关(并且按照惯例使用--with-myextensionconfigure 选项而不是--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.

请记住,您需要重新启动 apache ( sudo /etc/init.d/apache2 restart) 以获取任何扩展更改。

于 2010-02-28T09:26:43.040 回答