首页 文章

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

提问于
浏览
4

我正在尝试使用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 . 所以,10):库没有加载:/opt/local/lib/libaprutil-1.0.dylib\n引用自:/opt/local/apache2/modules/mod_php53.so\n原因:不兼容的库版本:mod_php53.so需要版本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 .

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

有任何想法吗?

1 回答

  • 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系统二进制兼容 . 它可能适合你,但这只是巧合 .

相关问题