systemd 在链接共享库时做了一些有趣的事情吗?
我有一个 php 扩展,它会加载 php 扩展目录之外的共享库。如果我运行 php-cli 或从 CLI 启动 php-fpm,它会按预期工作,并且 phpinfo() 会显示扩展的构建方式:
Compile-time ORACLE_HOME /path/to/oracle_home
Libraries Used -Wl,-rpath,/path/to/oracle_home/lib -L/path/to/oracle_home/lib -lclntsh
使用 systemd(systemctl)启动 php-fpm 时,日志中出现以下错误:
NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/oci8.so' - libclntsh.so.12.1: cannot open shared object file: No such file or directory in Unknown on line 0
-lclntsh 不应该使用 rpath 来查找所需的库吗?为什么 systemd 会破坏这一点?
注意:将以下内容添加到单元文件没有帮助:
Environment=LD_LIBRARY_PATH=/path/to/oracle_home/lib
在 /etc/ld.so.conf.d/ 下添加该路径也无济于事。