2011-11-12 9 views
9

xcode 4を使用して、プライベートdylib /フレームワークを使用してココアアプリケーションを構築します。ビルドCocoaアプリケーションプライベートdylib /フレームワークでバンドル

私の開発Macでは、dylibを/ usr/local/libディレクトリに置き、それをプロジェクトにドラッグします。

アプリはコンパイルされ、自分のコンピュータで完璧に動作します。

このアプリを他のMacに配布するには、コピーファイル作成フェーズを作成し、「そのdylibをFrameworksディレクトリにコピーする」と言います。

アプリケーションは正常に構築されており、実際にはdylibはアプリケーションバンドルのFrameworksディレクトリにコピーされています。

このdylibがインストールされていない別の通常のMacでこのアプリケーションを実行すると問題が発生します。私はというエラーを取得:

dyld: Library not loaded: /usr/local/lib/mylib.dylib 
+0

ライブラリをソースからビルドしているのですか、または既にビルドされている場所から取得しましたか? –

答えて

9

問題はあなたがアプリケーションバンドルにフレームワークをコピーしているという事実から来ているので、それはのような場所にあります。

<you_app_path>/Contents/Frameworks 

いますが、ロードしようそれは/usr/local/libからです。あなたの展開マシンでは利用できません。 Apple Framework Programming Guideから:

アプリケーションフレームワークを埋め込むには、あなたはいくつかのステップを実行する必要があります。

あなたは正しい場所にフレームワークを置くために、アプリケーションのターゲットのビルドフェーズを設定する必要があります。

フレームワークのインストールディレクトリを設定する必要があります。このディレクトリは、フレームワークの存続場所を指示します。

アプリケーションターゲットを、インストールディレクトリのフレームワークを参照するように設定する必要があります。

ここで、ビルドフェーズは正常です。また、アプリケーションターゲットのビルド設定を正しく送信したと仮定します。残っているのは、フレームワークターゲットのインストールディレクトリを設定することです。

フレームワークを自分で構築していない場合、フレームワークのインストールパスを変更して、ローダー(アプリケーション)に対して相対パスを@loader_path/../Frameworks/(または@executable_path/../Frameworks)のように変更することができます。あなたはinstall_name_toolによってこれを行うことができます。

独自のプライベートフレームワークをコンパイルする場合は、Xcodeのビルド設定でそのインストール場所を定義できます。

+0

はい。このメソッドは機能します。少なくとも、アプリケーションにデプロイメントマシンのプライベートフレームワークをロードさせることができます。しかし、別のエラーが表示されます。プライベートフレームワークはいくつかのライブラリ(/usr/lib/libiconv.dylib libcurlなど)をリンクします。 otoolを使用してライブラリのパスを確認します。 /usr/lib/lib *** これらのライブラリのパスはどのように設定されていますか? – ianXian

+0

dylibを使用すると、install_name_toolを使用し、@loader_path /../Frameworks/(executable_pathではなく)を指定できます。 – sergio