php自定义c扩展与外部共享库

时间:2012-07-16 16:11:28

标签: php c linux

我想开发一个依赖于外部共享库的扩展。我目前的问题是我无法将此共享库链接到我的扩展程序。

我的开发环境是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时生成的makefile都没有对库的引用,加上编译的.so文件失败(显然)。

如果我有办法根据体系结构确定正确的lib目录,那也很有用。

1 个答案:

答案 0 :(得分: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。