Xcode 4の最新バージョンを使用してCocoaアプリケーションを開発しています。動的ライブラリをプロジェクト(dylibs
)にリンクしたいと考えています。
プロジェクトにライブラリを追加するだけでは不十分で、install_name_tool
およびotool
を実行して、プロジェクトにバンドルされているライブラリをプロジェクトで使用する必要があることをどこかで読みました。
install_name_tool
のマニュアルページを読みましたが、なぜこれを行う必要があるのか理解できません。
ライブラリはどのように機能しますか? /usr/local/lib/mylibrary.dylib
の実行時のotool -L
のように、アプリケーションとライブラリがマシンの特定の場所を指すパスを持っている部分に特に関心があります。
アップルには、共有ライブラリを見つける方法がいくつかあります。
@executable_path
:メインの実行可能ファイルに対して相対的@loader_path
:参照するバイナリとの相対@rpath
:パスのリストのいずれかを基準にします。@rpath
は、OS X 10.5で導入された最新の追加機能です。
たとえば、実行可能ファイルをContents/MacOS
に、ライブラリをContents/Libraries
に入れたい場合は、次のようにします。
install_name_tool -id @rpath/Libraries/lib_this.dylib builddir/lib_this.dylib
そして、トップレベルの実行可能ファイルセットrpath
で、
install_name_tool -add_rpath @loader_path/.. myexecutable
そして:
install_name_tool -change builddir/lib_this.dylib @rpath/Libraries/lib_this.dylib myexecutable
注:-change
の後の最初のパスは、現在バイナリ内にあるものと正確に一致する必要があります。
紛失した場合、otool -l -v myexecutable
は、実行可能ファイルに現在どのロードコマンドが正確に含まれているかを通知します。
詳細については、man dyld
およびman install_name_tool
を参照してください。
すべての依存ライブラリを公開するMacDependencyという名前のGUIツールもあります( https://github.com/kwin/macdependency/ )。