0

アプリケーションがあり、特定の dylib をバンドルしたいと考えています。「dylibbundler」を使用して、依存関係とともにdylibを実行可能フォルダーにコピーしています。私が使用しているコマンドは次のとおりです。

dylibbundler -od -b -x /opt/local/lib/libil.dylib -d ./libs/ -p @executable_path/libs/

dylibbundler は、実行可能ファイルと同じディレクトリにあります。このツールは、ライブラリとそのすべての依存関係に対して "install_name_tool" を再帰的に実行します (そして、それらを指定されたディレクトリにコピーします)。./libs/libil.1.dylib に対して otool -L を実行すると、以下が返されます。

@executable_path/libs/libIL.1.dylib (compatibility version 3.0.0, current version 3.0.0)
@executable_path/libs/libtiff.5.dylib (compatibility version 8.0.0, current version 8.0.0)
@executable_path/libs/liblzma.5.dylib (compatibility version 6.0.0, current version 6.4.0)
@executable_path/libs/libpng15.15.dylib (compatibility version 30.0.0, current version 30.0.0)
@executable_path/libs/libmng.1.dylib (compatibility version 2.0.0, current version 2.0.0)
@executable_path/libs/liblcms.1.dylib (compatibility version 2.0.0, current version 2.19.0)
@executable_path/libs/libjasper.1.dylib (compatibility version 2.0.0, current version 2.0.0)
@executable_path/libs/libjpeg.9.dylib (compatibility version 10.0.0, current version 10.0.0)
@executable_path/libs/libIlmImf.6.dylib (compatibility version 7.0.0, current version 7.0.0)
@executable_path/libs/libImath.6.dylib (compatibility version 7.0.0, current version 7.0.0)
@executable_path/libs/libHalf.6.dylib (compatibility version 7.0.0, current version 7.0.0)
@executable_path/libs/libIlmThread.6.dylib (compatibility version 7.0.0, current version 7.0.0)
@executable_path/libs/libIex.6.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
@executable_path/libs/libz.1.dylib (compatibility version 1.0.0, current version 1.2.7)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)

すべてを正しくコピーしたようです。しかし、アプリケーションを実行すると、同じ例外が発生し続けます。

Unhandled Exception: System.DllNotFoundException: ./libs/libIL.1.dylib
Unhandled Exception: System.DllNotFoundException: @executable_path/libs/libIL.1.dylib
Unhandled Exception: System.DllNotFoundException: libs/libIL.1.dylib

ご覧のとおり、ライブラリを参照する 3 つの異なる方法を試しましたが、常に検索に失敗します。

何か助けていただければ幸いです。私はこの問題を何ヶ月も解決しようとしています。

更新: dylibへの絶対パスを指定すると、それが見つかりますが、依存関係について不平を言います:

Mono: DllImport error loading library 'dlopen(/Users/me/myapp/libs/libil.1.dylib, 9): Library not loaded: @executable_path/libs/libtiff.5.dylib
  Referenced from: /Users/me/myapp/libs/libil.1.dylib
  Reason: image not found'.

@executable_path が実際の絶対実行可能パスに置き換えられていないように思えます。

4

2 に答える 2