2012-07-16 51 views
3

我想開發一個擴展,這取決於外部共享庫。我目前的問題是,我無法將此共享庫鏈接到我的擴展。php自定義c擴展與外部共享庫

我的開發環境是Fedora Linux x64 + PHP 5.4。這個外部共享庫是專有的,我只有它的頭文件(.h)和.so文件(對於32位和64位)。

該項目目前的config.m4文件如下:

PHP_ARG_WITH(projectname, 
    [Whether to enable ProjectName support], 
    [ --with-projectname    enable ProjectName support]) 

if test "$PHP_PROJECTNAME" != "no"; then 
    PHP_ADD_LIBRARY_WITH_PATH(externallib, lib64, PROJECTNAME_SHARED_LIBADD) 

    AC_DEFINE(HAVE_PROJECTNAME, 1, [Whether you have ProjectName]) 
    PHP_NEW_EXTENSION(projectname, projectname.c, $ext_shared) 
fi 

這裏的問題是每次運行./configure --with-projectname生成的文件也不具有對庫的任何參考時間,再加上編譯.so文件失敗(明顯)。

如果我有一種方法根據體系結構確定正確的lib目錄,這也會很有用。

回答

0

您已經包含了該庫,但看起來您缺少實際的鏈接選項。我沒有做最長的時間,但我認爲像下面這樣的東西應該有效。

EXTERNAL_LIB="blahLibName" 
LIB_LINK_CMD="-L/usr/local/lib -l$EXTERNAL_LIB" 

PHP_ADD_LIBRARY_WITH_PATH(externallib, lib64, PROJECTNAME_SHARED_LIBADD) 
PHP_EVAL_LIBLINE($LIB_LINK_CMD, PROJECTNAME_SHARED_LIBADD) 

這裏的語法可能根本不對,但您絕對需要PHP_EVAL_LIBLINE。