2017-03-27 6 views
1

私のdylibの依存関係に問題があります。Xcodeリンカーを正しく設定する:ライブラリが見つかりませんでしたが、「リンクバイナリライブラリ」リスト

は、私は現在follwingエラーメッセージが表示されます。

dyld: Library not loaded: /opt/local/lib/libgvc.6.dylib 
    Referenced from: /Users/klauskneupner/Library/Developer/Xcode/DerivedData/Visual_Thinking-bvgfcqjwnobabodenabpggrwnoet/Build/Products/Debug/Visual Thinking.app/Contents/Frameworks/libgvplugin_dot_layout.6.dylib 
    Reason: image not found 

面白い部分は、私は依存関係のリストでそのライブラリ(libgvc.6)を持っているということです。 build settings この場合、libgvc.6はプロジェクトディレクトリにあり、/opt/local/libにはありません。

何をする必要がありますか?事前に多くの感謝!

答えて

1

ビルド時に、OS Xの静的リンカーldによって、アプリケーションがバイナリにリンクする各ライブラリの共有ライブラリ識別子が書き込まれます。実行時に、ダイナミックリンカdyldは、アプリケーションバイナリで指定されたパスから各共有ライブラリをロードしようとします。 otool -L YourApp.app/Contents/MacOS/YourAppを使ってこの情報を見ることができます。

クラッシュ出力の/opt/local/lib/libgvc.6.dylibへの参照は、プロジェクト内の共有ライブラリ識別子がlibgvc.6.dylibであることを示しています。あなたのアプリケーションがそれを使用するような方法であなたの.appバンドル内のライブラリではなく/opt/local/libで探して必要に含めるには:

  1. 変更にlibgvc.6.dylibの共有ライブラリ識別子をようdyldのは内のバイナリを探しますあなたのアプリケーションバンドル。これは通常、install_name_tool -id @rpath/libgvc.6.dylib libgvc.6.dylibを実行して行います。 @rpathプレースホルダは、dyldに、ライブラリをロードしているバイナリの実行パス検索パスの各エントリを置換しようとします。デフォルトでは、アプリケーションバンドルのFrameworksディレクトリがこの検索パスにあります。

  2. libgvc.6.dylibにリンクしている既存のビルドされたライブラリを更新して、新しい名前で参照します(手順1で行った変更は、ライブラリに対して新しいバイナリが作成されたときのみ有効です。 にリンクされているあらかじめ構築されたライブラリです)。 install_name_tool -change /opt/local/lib/libgvc.6.dylib @rpath/libgvc.6.dylib path/to/other.dylibを使用して、これらの他のライブラリを更新することができます。あなたのクラッシュ出力は、libgvplugin_dot_layout.6.dylibが更新が必要なそのようなライブラリの1つであることを示しています。唯一のものではないかもしれません。

  3. 修正されたライブラリがアプリケーションバンドルのFrameworksサブディレクトリにコピーされていることを確認してください。これは通常、Xcodeプロジェクトのファイルコピービルドフェーズを使用して実行されます。

+0

グレートジョブ。ありがとうございました。 –

関連する問題