2012-04-28 7 views
3

OSXプロジェクトで作業しているdylibを取得しようとしています。アイブ氏はいくつかのサンプルを読んでいXcode4、dylib&install_name_tool

、特にこの1: XCode 4 adding dylib

しかし、私はまだそれが仕事を得ることができません。

  1. は私のXcodeプロジェクトフォルダにtesting.1.dylibをコピー元:

    は、ここで私が行っている段階です。

  2. sudo install_name_tool -id @executable_path/../Frameworks/testing.1.dylib testing.1.dylib
  3. 蘭蘭:otool -L testing.1.dylibをし、次のように受け取っ:

    testing.1.dylib:
    @executable_path/../Frameworks/testing.1.dylib (compatibility version 2.0.0, current version 2.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

  4. は、プロジェクトのフレームワークとしてtesting.1.dylibを追加しました。 (ライブラリオプション付きリンクバンドルの使用)。

  5. 私が期待したとおりにtesting1.dylibが.App/Frameworkにコピーされないので、手動でFrameworkパスを作成してtesting.1.dylibをコピーします: a)mkdir -p testing.app/Contents/Frameworks b)cp testing.1.dylib testing.app/Contents/Frameworks
  6. XCodeでは、ターゲットとプロジェクトの両方についてRuntime Search Pathsを更新します。@executable_path /../フレームワーク。

ここで、testing.appを新しくインストールした別のマシンにコピーして実行しようとしています。

dyldの:ライブラリがロードされていません: /user/local/lib/testing1.dylibから参照: 理由を/Users/me/testing.app/MacOS/./testing:画像ではない私は、次のエラーを取得するどの見つけた

私は何かが不足していますが、私は何が分からないのですか?誰かが私を正しい方向に向けることができますか?

注:install_name_toolを実行しているとき、私はsudoを使用する必要があるか、私は次のエラーを取得:

install_name_tool:開くことができません入力ファイル:(パーミッション拒否) install_name_toolを書くためのtesting.1.dylib:CAN (ファイル記述子が不良です) install_name_tool:ファイルに新しいヘッダーを書き込めません:testing.1.dylib(不正なファイル記述子) install_name_tool:できません入力ファイルの上に書いてください:testing.1.dylib(ファイル記述子が間違っています)

+0

otool -L the_executable_itselfには何がありますか? – Vassilis

答えて

1

ライブラリをプロジェクトにコピーする必要はありません。

所有するファイルのインストール名を変更する場合は、sudoを使用する必要はありません。あなたは図書館のファイルを所有していませんか?おそらく、サードパーティのプロジェクトで「sudo make install」したのでしょうか?それをインストールしてビルドディレクトリにあるものにリンクしないでください。このライブラリをビルドする場合は、リンクコマンドにコマンドラインオプションを使用してビルドしたときにそのインストール名を設定する必要があります。

ターゲットにライブラリを追加するとリンクされますが、自動的にコピーされることはありません。コピーファイルのビルドフェーズを作成してライブラリを追加することもできます。

@rpathベースのインストール名を使用していない限り、ランパス検索パスを設定する必要はありません。

私はあなたが作成したコピーではなく、インストール名を変更したのではなく、手順1でをコピーしたライブラリと実際にリンクしていると思われます。ビルドのトランスクリプトからの実際のリンクコマンドは何を言っていますか?ステップ1でどこからライブラリをコピーしましたか?/usr/libまたは/ usr/local/libからのものであれば、おそらくXcodeがそれをリンクしています。

1

あなたが参照した「XCode 4 added dylib」の質問には、「ファイルのコピー」ビルドフェーズが設定されているようです。あなたのdylibにすでに実行可能なパスが書いてあるので、これはかなり簡単です。ターゲット設定>ビルドフェーズ>ビルドフェーズを追加>ファイルをコピーするだけです。その後、ナビゲーターのサイドバーからファイルにdylibをドラッグし、リンク先をフレームワークに設定します。

これは、dylibをアプリケーションパッケージの内容にバンドルする必要があります.dylib内の実行可能パスは正しいものを指している必要があります。