PHP8.0扩展链接自定义共享库失败:configure提示找不到OSC库
问题:PHP扩展OSB无法找到自定义共享库OSC
我正在为自研PHP扩展(OSB)集成自定义共享库(OSC),但执行./configure --with-osb时,始终提示找不到OSC库。扩展目录下已包含存放头文件的include文件夹和存放osc.so的lib目录,使用PHP 8.0版本,且无法使用PKG-Config。
当前config.m4代码如下:
PHP_ARG_WITH(osb, for osb support, [ --with-osb Include osb support]) if test "$PHP_OSB" != "no"; then LIBNAME=osc LIBSYMBOL=mute PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL, [ PHP_ADD_INCLUDE($OSB_DIR/include) PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $OSB_DIR/lib, OSB_SHARED_LIBADD) AC_DEFINE(HAVE_OSB,1,[ ]) ],[ AC_MSG_ERROR([wrong $LIBNAME lib version or lib not found]) ],[ -L$OSB_DIR/lib -ldl ]) PHP_SUBST(OSB_SHARED_LIBADD) PHP_NEW_EXTENSION(osb, $ext_shared) fi
排查与修复步骤
明确
$OSB_DIR变量的取值
现有代码中$OSB_DIR未定义来源,默认--with-osb不带路径时$PHP_OSB值为yes,导致路径为空。修改PHP_ARG_WITH并初始化路径:PHP_ARG_WITH(osb, for osb support, [ --with-osb[=DIR] Include osb support (default is current directory)], , yes) if test "$PHP_OSB" != "no"; then if test "$PHP_OSB" = "yes"; then OSB_DIR=`pwd` else OSB_DIR="$PHP_OSB" fi # 后续原有代码... fi遵循共享库命名规范
Linux下共享库标准命名为libxxx.so,将osc.so重命名为libosc.so;若不想重命名,需确保链接器能识别非标准命名的库。验证导出符号
LIBSYMBOL
用以下命令检查mute是否为osc.so中已导出的函数符号:nm -D osc.so | grep mute若输出为空,需修改OSC库的编译选项(添加
-fPIC并确保函数全局可见)。调整链接参数顺序
在PHP_CHECK_LIBRARY的额外链接参数中显式添加库名:],[ -L$OSB_DIR/lib -l$LIBNAME -ldl ])临时设置库路径环境变量
执行configure前先指定库搜索路径:export LD_LIBRARY_PATH=$(pwd)/lib:$LD_LIBRARY_PATH ./configure --with-osb验证头文件路径
用--verbose参数查看编译时的头文件搜索路径,确认$OSB_DIR/include被正确添加:./configure --with-osb --verbose
内容的提问来源于stack exchange,提问作者Stefan Moser
相关产品推荐
相关产品推荐

