15

他のいくつかのライブラリに依存するプラグインアプリケーション(dylib)を作成しています。これらの他のライブラリは私のシステムにインストールされていますが、どのユーザーのシステムにもインストールされるとは限りません。したがって、アプリケーションと依存関係をバンドルする方法を見つける必要があります。

otool他のdylibへのパスを一覧表示または変更するために使用できることがわかりました。これにより、プラグインアプリケーションと必要なすべての依存関係をバンドルするフォルダーを作成できます。

ただし、これを手動で行うことは、時間のかかる馬鹿げた作業のように思えます。それを自動化するために利用できるユーティリティはありますか?

それとも、私はそれを間違ってやっていて、この問題に対してより良い、より明白なアプローチがありますか?

編集ほとんどのタスクを自動化するスクリプト を作成しました。

4

3 に答える 3

15

install_name_toolを使用して、dylibで相対パスを使用します。そうすれば、一度設定すれば、インストール時にライブラリを変更することなく、そのディレクトリをどこにでもインストールできます。

すべてのdylib依存関係を1つのフォルダーに配置してから、install_name_toolを使用して、依存している他のdylibの相対的な場所を設定する必要があります。ライブラリlibmyfoo.dylibがlibbar.dylibに依存していると仮定します。

install_name_tool -change "/Whatever/full/path/libbar.dylib" "@loader_path/libbar.dylib" libmyfoo.dylib

このように、ライブラリは常にlibmyfoo.dylibが配置されているのと同じディレクトリでlibbar.dylibを検索します。

他のdylibが相互に依存している場合は、それらに対してinstall_name_toolを実行する必要がある場合もあります。

install_name_toolのドキュメントには、「インストール名またはrpathが大きい場合にこのツールを機能させるには、バイナリをld(1)-headerpad_max_install_namesオプションでビルドする必要がある」と記載されているため、-headerpad_max_install_namesコマンドラインオプションを含めるようにしてください。ライブラリを構築します。

@loader_pathdylibのロードに使用されるバイナリ(この場合はlibmyfoo.dylib)を基準にしています。@executable_pathライブラリのロードシーケンスを開始した実行可能ファイルに関連するライブラリを検索する場合に使用します。

于 2010-01-29T19:45:37.383 に答える
4

クリストファーの答えを完成させるために、ここに有用なリソースへのいくつかのリンクがあります:

于 2010-02-01T08:58:16.150 に答える
3

Macdylibbundlerは、求められていることを正確に実行する便利な小さなツールです。OSX用のバイナリを配布するとき、それは確かに私の命を救いました。

于 2013-09-08T11:23:24.697 に答える