3

大規模なプロジェクトからライブラリを実行することを目的とした単純なコンソール アプリケーションがあります。コンソール アプリケーションは、ライブラリも含む XCode プロジェクト内の 1 つのターゲットです (さらに、今は気にしない他のターゲットもいくつかあります)。コンソール ターゲットは、ビルド フェーズの「ターゲットの依存関係」および「バイナリとライブラリのリンク」にライブラリをリストすることで、ライブラリを参照します。

[実行] ボタンをクリックし、[すべての出力] の下のコンソール出力を調べることで、XCode 内からコンソール プログラムを正常に実行できます。

ただし、XCode の外部で実行しようとすると、ロード エラーが発生します。プロジェクト ナビゲーターの [製品] の下にあるコンソール アプリケーションを選択し、情報パネルの [ID] セクションで [フル パス] を見つけます。このパスをターミナル ウィンドウにコピーして実行すると、次のようなエラーが表示されます。

dyld: Library not loaded:
@executable_path/../Frameworks/[LIBRARY].framework/Versions/A/[LIBRARY]
Referenced from: [THE PATH THAT I TYPED]
Reason: image not found

コンソール アプリケーションをコンソールから実行するには、どうすればよいですか?

(注:「ファイルのコピー」フェーズで、「サブパス」を空白のままにして、この回答ごとに「@executable_path/../Frameworks」に設定しようとしましたが、これはココアアプリに関するものでしたが、どちらの方法も役に立ちませんでした. )

4

1 に答える 1

1

上記のコメント投稿者が説明しているように、dyld はダイナミック ローダーであり、印刷されたパスでライブラリを探しています。( と表示されている場合は@executable_path、実際に実行しようとしているコンソール アプリケーションの場所を意味します。)

XCode からコンパイルされた出力を見ると、次のようなフォルダー階層が表示されます。

Debug/
    MyProgram
    Frameworks/[LIBRARY].framework/Versions/A/[LIBRARY]

../Frameworks何らかの理由で、この構造はローダーが必要とするものと一致しません。.ではなく でライブラリを探しています./Frameworks

ローダーが使用する環境変数をいじったり、プログラム自体を微調整したりするのではなく、これらのファイルをエラー メッセージで指定された構造を持つ新しいフォルダーにコピーしました。

foo/
    bin/MyProgram
    Frameworks/[LIBRARY].framework/Versions/A/[LIBRARY]

foo/bin/MyProgram問題なくターミナルから実行できるようになりました。

于 2013-07-30T16:19:54.453 に答える