2009-10-02 40 views

回答

11

如果你的C擴展代碼使用共享庫,需要聲明的是,在config.m4文件。

強烈建議使用隨機配備的PHP源ext_skel腳本生成一個骨架的config.m4:

./ext_skel --extname=myextension

既然你鏈接到庫中,按照慣例,你應該使用所述--with-myextension選項(相對於--enable-myextension)。取消註釋config.m4中的相關行並填寫lib的詳細信息。

類似以下內容:

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

    PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL, 
    [ 
    PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $MYEXTENSION_DIR/lib, MYEXTENSION_SHARED_LIBADD) 
    AC_DEFINE(HAVE_MYEXTENSIONLIB,1,[ ]) 
    ],[ 
    AC_MSG_ERROR([wrong $LIBNAME lib version or lib not found]) 
    ],[ 
    -L$MYEXTENSION_DIR/lib -ldl 
    ]) 

然後構建它,運行:

phpize 
./configure --with-myextension 
make 

最後,你需要你的模塊(或ln -s)複製到任何地方你的系統能夠找到它。

如果所有的工作,然後php -m應該包括在列表中的模塊。

不幸的是,我從來沒有找到一個很好的在線參考PHP的config.m4命令 - 這本書是Sara Golemon's Extending and Embedding PHP,也是George Schlossnagle's Advanced PHP Programming的一部分。

有一個合理的新手引導到由薩拉·戈爾曼here創建PHP擴展,但對於肉類,你真的需要她的書。