前述のように、エラーメッセージのdylib
の名前は、実際に使用しているもの(3.2
対3.2.0
)と異なります。 dylib
はすでにビルドされており、この方法でプロジェクトにインジケータを含めるので、既存のrpath
またはid
がすでに存在します。 otool
を使用して
:
$ otool -l libopencv_core.3.2.0.dylib
...
Load command 3
cmd LC_ID_DYLIB
cmdsize 56
name @rpath/libopencv_core.3.2.dylib (offset 24)
time stamp 1 Wed Dec 31 17:00:01 1969
current version 3.2.0
compatibility version 3.2.0
...
Load command 16
cmd LC_RPATH
cmdsize 32
path /usr/local/lib (offset 12)
二つのものがここで観察することができます。最初は矛盾を確認するLC_ID_DYLIB
であり、第2に、存在するLC_RPATH
(rpath)は、ライブラリの場所が/usr/local/lib
であることを示すように設定されている。あなたのアプリでlibをインクルードするので、更新する必要があります。
アップデートライブラリ(1アプリに含まれている):
$ install_name_tool -id @rpath/libopencv_core.3.2.0.dylib libopencv_core.3.2.0.dylib
アップデートLC_ID_DYLIB
。
$ install_name_tool -add_rpath "@executable/../Frameworks" libopencv_core.3.2.0.dylib
正しいLC_RPATH
を追加します。
$ install_name_tool -delete_rpath "/usr/local/lib" libopencv_core.3.2.0.dylib
は、ライブラリからrpath
/usr/local/lib
を削除します。再び実行otool -l
確認するには:
...
Load command 3
cmd LC_ID_DYLIB
cmdsize 64
name @rpath/libopencv_core.3.2.0.dylib (offset 24)
time stamp 1 Wed Dec 31 17:00:01 1969
current version 3.2.0
compatibility version 3.2.0
...
Load command 17
cmd LC_RPATH
cmdsize 40
path @executable/../Frameworks (offset 12)
を今、あなたは、スタンドアロンのアプリでdylib
を含めることができる必要があり、それはパスだ正しく設定する必要があります。更新されたdylib
はhereです。ライブラリを更新すると、アプリは問題なく開かれます。
ノート:あなたの質問には、あなたは、エラー状態libopencv_imgproc.3.2.dylib
ものの、libopencv_core3.2.0.dylib
をインポートしているが、私はそれが同様の問題を受け、別のdylib
をだと仮定し、これは確かに他の人にも適用することができます。ライブラリは、複数のrpaths
が存在することが可能と/usr/local/bin
以来、すでにそれは、最初にその場所を使用して、間違った名前に加えています存在するがrpath
あなたが最初にXcodeで設定していたが
正しかったです。
ビルドフェーズで 'Link Binary With Libraries'の下に' dylib'が含まれていますか? 'dylib'のコピーを作成し、' Frameworks'フォルダのプロジェクトに追加することもお勧めします。そうすれば、プロジェクトをビルドするときに正しく設定されます。 –
@ l'L'lはい、確かに。それ以外の場合、コンパイルはすでに失敗します。プロジェクトへのコピーは違いはありません。 dylibは、上記のコピーフェーズで実行されるアプリ内にある必要があります。 –
ビルド設定>リンク>ランパス検索パスに '@ executable_path/Frameworks'を追加してみてください。 –