OSX上の異なるlibjpegダイナミックライブラリ間にダイナミックリンク競合があります。最初に、標準のネイティブlibJPEG.dylib(/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/)があります。しかし、MacPortsを使用している場合、ポート関連のlibjpeg.dylibを(/ opt/local/libに)置くこともできます。後者は、たとえば、他のポートの依存関係としてインストールされている可能性があります。OSXの動的リンクの優先順位の競合ですか?
システムlibJPEG(これが好ましい)にリンクすると、問題が発生します。 /opt/local/lib
がDYLD_LIBRARY_PATHにある場合は、シンボルロード時にランタイムエラーが生じ、ダイナミックLIBを検索する際 はその後、そのパスが優先されます。
-
:
実際の問題を解決する良い方法は何ですか(
DYLD_LIBRARY_PATH
から/opt/local/lib
を削除すると明らかにそれが解決されますが、他の依存関係には問題が発生します)。ダイナミックライブラリでは、他にどのようなパスが検索されていますか(つまり、 "/ System/Library"パスが指定されています)、なぜDYLD_LIBRARY_PATHのランクが高いのですか?
dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from:
/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /opt/local/lib/libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Trace/BPT trap: 5
をだから私は(おそらく関連)二つの質問を持っています
は、返信いただきありがとうございます。 'otool'と' install_name_tool'は本当に便利です。リンクするときにすべてのライブラリにフルパスを使用しない理由は、バイナリがbrewやportsなしのシステムに配布されるためです。私はできるだけ多くのシステムライブラリを使いたいと思っています。残りのライブラリはアプリと共にパッケージ化されます。しかし、開発中にディレクトリ構造はインストールされたアプリケーションとは違って見えるので、システムライブラリ以外のライブラリを相対パスで(配布するバージョンのように)リンクしますが、準備ができるまで/ opt/local /をDYLDに入れますリリース/パッケージング。 – kamjagin
しかし、正しい方法はDYLD_LIBRARY_PATHを避けることです。 – kamjagin
また、特定のツリー構造を必要とするMac用のシステム実行可能ファイルも開発しています。私が使っている解決策は2つあります。Xcodeで 'INSTALL_PATH'、' DSTROOT'、 'DEPLOYMENT_LOCATION'を使って最終的なツリーのようなツリーにインストールします。相対パスに依存するもの( '@ executable_path')でも十分です。絶対パスを必要とするものについては、私の "本当の"インストールパスからXcodeの 'DSTROOT'へのシンボリックリンクがあります。 –