macos – Mac OSX如何确定要加载哪个dylib?

我正在尝试使用MacPorts的
PHP(mod_php53.so)在Mac OSX Yosemite中运行Apache.请注意,我没有使用MacPorts的Apache,而是使用Yosemite的Apache和MacPorts的PHP.这在过去与OSX Mavericks和Mountain Lion一起运作良好.

在Yosemite中运行/usr/sbin / apachectl -t时出现此错误:

httpd: Syntax error on line 228 of /private/etc/apache2/httpd.conf: Cannot load /opt/local/apache2/modules/mod_php53.so into server: dlopen(/opt/local/apache2/modules/mod_php53.so, 10): Library not loaded: /opt/local/lib/libaprutil-1.0.dylib\n Referenced from: /opt/local/apache2/modules/mod_php53.so\n Reason: Incompatible library version: mod_php53.so requires version 6.0.0 or later, but libaprutil-1.0.dylib provides version 4.0.0

实际上,/ opt / local / lib / libaprutil-1.0.dylib当前版本是6.4.0,所以它应该工作.

 otool -L /opt/local/lib/libaprutil-1.0.dylib
 /opt/local/lib/libaprutil-1.0.dylib:
 /opt/local/lib/libaprutil-1.0.dylib (compatibility version 6.0.0, current version 6.4.0)

我猜Apache正在加载位于/usr/lib中的系统的libaprutil-1.0.dylib:

otool -L /usr/lib/libaprutil-1.0.dylib 
/usr/lib/libaprutil-1.0.dylib:
/usr/lib/libaprutil-1.0.dylib (compatibility version 4.0.0, current version 4.0.0)

这是令人困惑的,因为错误消息明确指出MacPorts的libaprutil由于版本不兼容而未加载,但我想它正在尝试使用系统的libaprutil而不知道如何强制Apache加载MacPorts的libaprutil.

我已经尝试设置DYLD_LIBRARY_PATH环境变量,但这没有帮助.

有任何想法吗?

最佳答案 当环境包含DYLD_LIBRARY_PATH = /usr/lib时会发生这种情况.取消设置,它应该工作.

在OS X上使用绝对路径引用库.您正确地注意到/opt/local/apache2/modules/mod_php53.so使用其绝对路径引用/opt/local/lib/libaprutil-1.0.dylib.但是,在存在DYLD_LIBRARY_PATH的情况下,加载程序会忽略目录组件并在DYLD_LIBRARY_PATH中指定的目录中搜索文件名.

您看到的错误消息具有误导性:它试图告诉您在尝试处理/opt/local/lib/libaprutil-1.0.dylib加载命令的代码中发生错误(由于env变量而被转移) .

另请注意,由于MacPorts针对MacPorts Apache构建其PHP,因此您的PHP模块不一定与Apache系统二进制兼容.它可能适合你,但这只是巧合.

点赞