You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:19:56