2

Mac OS X 10.6.8で10.7用にビルドされたバイナリ実行可能ファイル(以下の例では ISCAgent) を実行しようとしています。

バイナリの問題は、バージョン6.0.0しかインストールされていないのに、 互換バージョンが7.0.0の/usr/lib/libcurl.4.dylibに依存していることです。

$ 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)

現在、実行可能ファイルに同梱されているlibxerces-c-3.1.dylibを、Snow Leopard で自分でビルドしたものに置き換えたところ、すべてが機能しているようです。

ただし、他のオプションが何であるかを知りたいです。

特に:

  1. 同じ /usr/lib ディレクトリに異なる互換バージョン値を持つ異なるバージョンのlibcurl.4.dylibを作成するにはどうすればよいですか (できないと確信していますが、それでも) 。ここで少し混乱しています。コード コントラクト (API) や ABI が変更された場合、ライブラリ ファイル名のバージョン番号も大きくする必要がありますね。一方、互換バージョン メカニズムがある場合、ファイル名に含まれる元のバージョン番号は何の役に立つのでしょうか。
  2. サードパーティの共有オブジェクトでハードコーディングされたライブラリ パスに影響を与えるにはどうすればよいですか? libcurl.4.dylib (MacPorts から、互換バージョン 8.0.0) を /opt/local/lib の下に置いていますが、適切な DYLD_LIBRARY_PATH をエクスポートしても役に立ちません。libxerces-c-3.1.dylib は常に libcurl.4 を選択します。 /usr/lib からの .dylib。
4

0 に答える 0