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

PHP扩展sqlsrv.so、pdo_sqlsrv.so迁移后依赖库缺失问题咨询

解决方案

方案1:编译期硬编码依赖搜索路径(推荐,一次编译可直接迁移)

原理是通过编译参数将目标服务器的自定义依赖路径写入扩展的RPATH字段,运行时会优先从该路径查找依赖,无需修改目标服务器的系统配置。
操作步骤:

  • 先在sqlsrv/pdo_sqlsrv源码目录执行phpize生成configure脚本
  • 执行configure时传入LDFLAGS参数指定RPATH,若编译阶段无法找到odbc相关依赖,可额外指定头文件和库文件的编译路径(将编译用的odbc依赖提前放到编译服务器的任意路径,示例为/tmp/msodbc):
./configure \
--with-php-config=/path/to/你的实际php-config路径 \
CFLAGS="-I/tmp/msodbc/include" \
LDFLAGS="-L/tmp/msodbc/lib -Wl,-rpath=/var/www/html/library/msodbc/"
  • 正常执行make && make install即可
    验证方式:编译完成后执行readelf -d sqlsrv.so | grep RPATH,可看到输出中包含你指定的目标服务器依赖路径。

方案2:运行期适配(无需重新编译)

如果不想重新编译扩展,可直接在目标服务器配置依赖搜索规则:

临时生效(测试用)

启动php-fpm或执行PHP命令前,先设置环境变量:

export LD_LIBRARY_PATH=/var/www/html/library/msodbc/:$LD_LIBRARY_PATH

永久生效(服务级)

如果用systemd管理php-fpm,编辑php-fpm的service文件,在[Service]段添加如下配置:

Environment="LD_LIBRARY_PATH=/var/www/html/library/msodbc/"

之后执行systemctl daemon-reload && systemctl restart php-fpm即可生效。

永久生效(系统级)

新建ld配置文件:

echo "/var/www/html/library/msodbc/" > /etc/ld.so.conf.d/msodbc.conf

执行ldconfig刷新系统库缓存即可全局生效。

方案3:全静态编译扩展

可将依赖的odbc静态库直接编译进扩展文件,生成的扩展无需额外携带依赖,操作时在configure参数中添加--enable-static,同时确保编译环境存在对应的libodbc.a、libodbcinst.a静态库即可,此方式生成的扩展文件体积更大。


内容的提问来源于stack exchange,提问作者shadyhill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:15:02