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

时间:2014-12-15 18:15:47

标签: macos apache macports osx-yosemite 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:/private/etc/apache2/httpd.conf第228行的语法错误:无法将/opt/local/apache2/modules/mod_php53.so加载到服务器:dlopen(/ opt / local / apache2 / modules / mod_php53.so,10):未加载库:/opt/local/lib/libaprutil-1.0.dylib\n引用自:/opt/local/apache2/modules/mod_php53.so\n原因:不兼容的库版本:mod_php53。所以需要版本6.0.0或更高版本,但libaprutil-1.0.dylib提供版本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。 / p>

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当环境包含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系统二进制兼容。它可能适合你,但这只是巧合。