多个libcurl.4.dylib具有不同的兼容版本

时间:2013-07-02 12:08:49

标签: macos libcurl dylib

我正在尝试在Mac OS X 10.6.8 上运行为 10.7 (以下示例中的ISCAgent)构建的二进制可执行文件。

二进制文件的问题在于它取决于 /usr/lib/libcurl.4.dylib 兼容版本 7.0.0 ,而我只安装了 6.0.0 版本:

$ otool -L ISCAgent 
ISCAgent:
    @executable_path/libsslserver.dylib (compatibility version 0.0.0, current version 0.0.0)
    @executable_path/libssl.dylib (compatibility version 1.0.0, current version 1.0.0)
    @executable_path/libcrypto.dylib (compatibility version 1.0.0, current version 1.0.0)
    @executable_path/libcachecom.dylib (compatibility version 0.0.0, current version 0.0.0)
    @executable_path/libxerces-c-3.1.dylib (compatibility version 0.0.0, current version 0.0.0)
    @executable_path/libicuuc.40.dylib (compatibility version 40.0.0, current version 40.0.0)
    @executable_path/libicudata.40.dylib (compatibility version 40.0.0, current version 40.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)

$ otool -L libxerces-c-3.1.dylib 
libxerces-c-3.1.dylib:
    @executable_path/libxerces-c-3.1.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0)
    @executable_path/libicuuc.40.dylib (compatibility version 40.0.0, current version 40.0.0)
    @executable_path/libicudata.40.dylib (compatibility version 40.0.0, current version 40.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

$ otool -L /usr/lib/libcurl.4.dylib 
/usr/lib/libcurl.4.dylib:
    /usr/lib/libcurl.4.dylib (compatibility version 6.0.0, current version 6.1.0)
    /usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
    /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP (compatibility version 1.0.0, current version 2.2.0)
    /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos (compatibility version 5.0.0, current version 5.0.0)
    /usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 41.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)

目前,我刚刚用我在Snow Leopard上构建的可执行文件替换了可执行文件附带的 libxerces-c-3.1.dylib ,一切似乎都有效。

我想知道我的其他选择是什么。

特别地:

  1. 我怎么能(我很确定我不能,但仍然)在同一个/ usr / lib目录中使用不同版本的 libcurl.4.dylib 和不同的兼容版本值?我在这里有点困惑 - 如果代码契约(API)和/或ABI发生变化,库文件名中的版本号也应该增加,不应该吗?另一方面,如果我们有兼容版本机制,文件名中的原始版本号有用吗?
  2. 如何影响第三方共享对象中的硬编码库路径?我有一个位于/ opt / local / lib下的libcurl.4.dylib(来自MacPorts,兼容版本8.0.0),但导出正确的DYLD_LIBRARY_PATH没有帮助 - libxerces-c-3.1.dylib总是选择libcurl.4来自/ usr / lib的.dylib。

0 个答案:

没有答案