3

Brewを使用してMacにFreeTypeをインストールしました。私の Mac のコードは正常に動作しますが、別の Mac でプロジェクトを実行しようとすると、以下のリンク エラーが発生します。

dyld: Library not loaded: /usr/local/opt/freetype/lib/libfreetype.6.dylib
Referenced from: /Users/ashutosh/Library/Developer/Xcode/DerivedData/InstrumentChamp- 
etytleaabhxmokadgrjzbgtmwxfl/Build/Products/Debug/instrumentchamp.app/Contents/MacOS/instrumentchamp
Reason: image not found (lldb) 

他の Mac でコードを実行しようとすると、Freetype のすべてのライブラリ ディレクトリとインクルード ディレクトリがプロジェクトの '$SRCROOT/' ディレクトリに含まれます。

ライブラリのリンク エラーに表示されるパスは、このプロジェクトを作成した Mac で、brew が freetype をインストールした場所です。

/usr/local/opt/freetype/lib/libfreetype.6.dylib

プロジェクトのホーム フォルダーに必要なすべての lib/ include/ ディレクトリをコピーしました。
そして、Xcode でライブラリとインクルード パスを設定しました。

ここで私が見逃しているのは何ですか?私のコードを他の Mac で移植できるようにするには、他に何をしなければなりませんか。Brewをインストールすることでプロジェクトを他のMacで実行できるようになりましたが、brewをインストールする必要なく実行したいです。

PS: 32 ビット プロセッサの freetype 用に .dylib をコンパイルできなかったため、brew を使用して freetype をインストールする必要がありました。

4

3 に答える 3

4

私のコメントで得た基本的な考え方は、OS X はライブラリを検索する場所についてかなりばかげているということです。コンパイル時に使用したのと同じ絶対パスを使用して、実行時にそれらを解決します。

通常、アプリケーションを構築したマシンとは別のマシンにアプリケーションをデプロイ/配布する場合は、ライブラリをインストール パッケージ/バンドルに含めます。しかし、おそらく実行時にアプリケーションへの相対パスを使用する必要があるため、 install_name_tool -change を使用すると、厄介な絶対パスを相対パスに置き換えることができます。

これが理にかなっていることを願っています.Appleは、OS Xでシステム全体のフレームワークを非常に簡単に使用できるようにしていますが、カスタムライブラリはそれほど多くありません. システム全体のフレームワークを使用してコンパイルすると、/System/Library/Frameworks/...すべての OS X インストールで普遍的に利用できます (同じターゲット リリース バージョンが与えられます)。


あなたの問題を解決するために、私は次のことを行います:

install_name_tool -change /usr/local/opt/freetype/lib/libfreetype.6.dylib @executable_path/lib/libfreetype.6.dylib <executable_name_here>

次に、ソフトウェアをコンパイルしたときの場所での libfreetype.6.dylib の検索を停止し、代わりに実行時の実行可能ファイルの場所 (この場合はサブディレクトリlib/) を基準にして検索します。

于 2013-10-07T17:08:16.857 に答える