在Ubuntu(Karmic Koala)上编译PHP扩展库

时间:2010-02-15 17:24:19

标签: php c++ c ubuntu php-extension

我在XP平台上编译了一些PHP扩展库(在C / C ++中)。我现在已将源代码移到我的Ubuntu框中,并希望构建libs以便在我的Linux机器上使用。

然而,我遇到了许多障碍:

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

    感谢Pascal Martin和this question,我设法构建并测试了一个较小的库。我只想仔细检查我的.m4文件的内容(因为我不熟悉格式),然后再继续使用其他库。

    这是自动生成的.m4文件的内容 - 是否有人熟悉该格式,并且可以解释它的含义 - 这样我就可以更加确定我已经取消注释了文件的正确部分。 / p>

    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 
    

    有没有人搞定上述内容?

    BTW,上面的config.m4文件是使用Autoconf 2.50生成的(我刚刚看过文档here并且正在慢慢消化它。

2 个答案:

答案 0 :(得分:2)

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

$ which phpize
/usr/bin/phpize


ext_skel应位于PHP源中的“ext”目录中,您可以通过SVN获取。

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

README.EXT_SKEL位于trunk/

之下


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

答案 1 :(得分:0)

要回答您的后续问题,dnl.m4个文件中的行注释标记,因此这些行目前没有执行任何操作。这可能没问题,因为如果你使用的是外部库(按惯例使用--with-myextension配置选项而不是--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)才能获取任何扩展程序更改。