2

GPhoto2 Frameworkを使用して簡単なアプリケーションを作成しましたが、フレームワークが最初にコンパイルされた場所にある限り、これは機能します。ただし、これをアプリバンドル内に移動したいので、個別にインストールする必要はありません。そのため、このメインの実行可能ファイルに対して相対的に機能させる必要があります。

残念ながら、フレームワークは Xcode プロジェクトではありません。スクリプトを使用してビルドするため、インストール ディレクトリのビルド設定を単純に変更することはできません。これは、回答を探しているときによく見られる解決策です。Xcode と Mac のプログラミングにまったく慣れていないため、フレームワークを Xcode プロジェクトに変換する方法を知ることもできません。

私が遭遇した他のアドバイスは、install_name_tool を使用してライブラリ ID と依存関係を更新し、絶対パスを「@executable_path/../Frameworks/GPhoto2.framework」の形式のものに置き換えることでした。フレームワークは単一のバイナリではなく、多数の .dylib および .so ライブラリが含まれていますが、これらすべての更新は半分しか成功していません。

ビルド時にフレームワークをアプリ バンドルにコピーするように Xcode を設定しました。次に、最初にコンパイルされた場所からフレームワークを削除すると、アプリケーションの読み込みに失敗し、OS X によって生成されたレポートで、予想どおり、libgphoto2 ライブラリが見つからないことが示されます。

次に install_name_tool を使用して、アプリ バンドル内のすべてのフレームワーク ライブラリとアプリ バイナリ自体の参照を更新すると、アプリケーションは読み込まれますが、接続されているカメラが見つかりません。otool を使用すると、すべての参照が正しく変更されていることを確認できます。

しかし、フレームワークのコピーを元の場所に置き換えると、そのフレームワークが相対位置または絶対位置のどちらを使用しているかに関係なく、接続されたカメラを認識して再び適切に機能します。明らかに、ロードしているにもかかわらず、まだこの場所を見ています。フレームワークから元の場所にある個々のライブラリ ファイルを順番に削除して、問題がこれらの依存関係の結果であるかどうかを確認することさえ試みましたが、どれが欠けていてもアプリは機能しません。

ちなみに、フレームワークの更新版を使ってアプリをビルドすると、「@executable_path/../Frameworks/GPhoto2.framework/prefix/lib/libgphoto2.2.dylib」というライブラリが見つからないと言って失敗します。

何か間違ったことをしているのですか、ステップが抜けているのでしょうか、それとも、Xcode の外部で作成されたフレームワークに対して実行しようとしていることは不可能ですか?

4

1 に答える 1

0

誰かがこの未来に出くわした場合、私の質問に対する答えは、私は何も悪いことをしていないということでした. 問題は、.so ファイルが libtool ltdl によってロードされていたことでした。絶対パスが必要なため、これらはビルド時に設定されていました。

ファイル gphoto2-abilities-list.c と gphoto2-port-info-list.c にパッチを適用して、実行時に相対ライブラリ パスと実行可能場所を結合するようにしました。その結果、FILENAME_MAX 定数を増やして、たとえばデスクトップからメール アプリケーションを実行できるようにする必要もありました。しかし、これと install_name_tool の使用により、外部依存関係を必要とせずに、GPhoto2 をアプリケーション内のフレームワークとして追加することができました。

install_name_tool を使用した後、フレームワークを使用して XCode でアプリをビルドできないという最後の問題は残りましたが、そのために元のフレームワーク ビルドを使用し、コンパイル後にコピーしたフレームワークの参照を更新と同時に更新しました。メインの実行可能ファイルにあるもの。

于 2013-03-31T17:46:03.183 に答える