3

OSXプロジェクトでdylibを動作させようとしています。

私はいくつかのサンプルを読んでいます、これは具体的には: Xcode4がdylibを追加しています

しかし、私はまだそれを機能させることができません。

これが私が実行したステップです:

  1. tests.1.dylibをXcodeプロジェクトフォルダーにコピーしました。
  2. 走ったsudo install_name_tool -id @executable_path/../Frameworks/testing.1.dylib testing.1.dylib
  3. ラン:otool -L testing.1.dylibそして以下を受け取りました:

    tests.1.dylib :
    @ executeable_path /../ Frameworks / tests.1.dylib(互換性バージョン2.0.0、現在のバージョン2.0.0)
    /usr/lib/libSystem.B.dylib(互換性バージョン1.0.0、現在バージョン159.1.0)

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

  5. この時点で、testing1.dylibをコンパイルすると、期待どおりに.App / Frameworkにコピーされないため、手動でフレームワークパスを作成し、testing.1.dylibをそれにコピーします。a)mkdir -p tests.app /Contents/Frameworksb)cptesting.1.dylibtesting.app/Contents/Frameworks
  6. XcodeでRuntime Search Paths、ターゲットとプロジェクトの両方のを@ executeable_path/../Frameworksに更新します。

次に、testing.appを別の新しくインストールしたマシンにコピーして、実行しようとします。次のエラーが発生します。

dyld:ライブラリがロードされていません:/user/local/lib/testing1.dylib参照元:/Users/me/testing.app/MacOS/./testing理由:画像が見つかりません

私は何が欠けていますか?

注:install_name_toolを実行する場合、sudoを使用する必要があります。そうしないと、次のエラーが発生します。

install_name_tool:入力ファイルを開くことができません:testing.1.dylib for write(許可が拒否されました)install_name_tool:オフセットを探すことができません:0 in file:testing.1.dylib for write(不正なファイル記述子)install_name_tool:できませんファイルに新しいヘッダーを書き込む:testing.1.dylib(不正なファイル記述子)install_name_tool:入力ファイルに書き込まれたものを閉じることができません:testing.1.dylib(不正なファイル記述子)

4

2 に答える 2

1

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

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

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

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

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

于 2012-04-28T14:04:43.700 に答える
1

あなたが参照した「XCode4addingdylib」の質問では、答えは「ファイルのコピー」ビルドフェーズを設定しているように見えました。dylibに書き込み実行可能パスがすでにあるので、これは非常に簡単です。次に、ターゲット設定>ビルドフェーズ>ビルドフェーズの追加>ファイルのコピーに移動します。次に、dylibをナビゲーターのサイドバーからファイルにドラッグし、宛先をフレームワークに設定します。

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

于 2013-05-27T22:56:53.420 に答える