我想开发一个依赖于外部共享库的扩展。我目前的问题是,我无法将这个共享库链接到我的扩展。
我的开发环境是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目录,那也会很有用。
您已经包含了库,但看起来缺少实际的链接选项。我已经很长时间没有这样做了,但我认为以下内容应该有效。
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_EVL_LIBLINE。