3

この 2 日間、私は多くの調査を行いました。この Web サイトだけで、少なくとも 20 の回答済みの質問を読み終えたに違いありません。どの解決策も私にはうまくいかないようです。アプリケーションで 5 つのフレームワークを使用していますが、コンピューターで問題なく実行できます。アプリケーションを別のコンピューターで実行しようとすると、ライブラリーのロード中にエラーが発生します。

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information:
dyld: launch, loading dependent libraries

Dyld Error Message:
  Library not loaded: /Users/USER/*/Allegro-5.0.framework/Versions/5.0.7/Allegro-5.0
  Referenced from: /Volumes/VOLUME/Pong.app/Contents/MacOS/../Frameworks/AllegroMain-5.0.framework/AllegroMain-5.0
  Reason: image not found

次の手順を実行しました。

  • フレームワークをアプリケーション バンドルにコピーするコピー ファイル ビルド フェーズがあります。
  • install_name_tool を使用して、インストール パスを @executable_path/../Frameworks に変更しました。
  • @executable_path/../Frameworks をランパス検索パスとして設定しました
  • フレームワークは私のプログラムにリンクされています

dyld が最初のフレームワーク (Allegro-5.0) を正常にロードしたように見えますが、2 番目のフレームワーク (AllegroMain-5.0) をロードしようとすると、正常にロードされていないと考えられます。

追加情報:

  • 現在OSX 10.7.5を実行しています
  • Xcode バージョン 4.6

私のアプリケーション バンドルのコンテンツ フォルダーはどのように見えるか: コンテンツのスクリーンショット

ライブラリとコピー ファイルのビルド フェーズを含むリンク バイナリ: Xcode のスクリーンショット

エラーの原因について、私が正しいとは断言できません。私はすでに allegro.cc に支援を求めましたが、基本的に、フレームワーク固有の問題については支援できないと言われました。これを理解するための助けに本当に感謝します!

編集

これが問題かどうかはわかりませんが、もう少し考えてみたところ、ヘッダーの検索パスに問題がある可能性があります。アプリケーションを実行するには、フレームワークごとに新しいヘッダー検索パスを作成する必要があります。現在、次の 5 つの個別のヘッダー検索パスが設定されています。

 /Library/Frameworks/Allegro-5.0.framework/Versions/Current/Headers
 /Library/Frameworks/AllegroMain-5.0.framework/Versions/Current/Headers
 /Library/Frameworks/AllegroDialog-5.0.framework/Versions/Current/Headers
 /Library/Frameworks/AllegroFont-5.0.framework/Versions/Current/Headers
 /Library/Frameworks/AllegroTTF-5.0.framework/Versions/Current/Headers

runpath 検索パスがどのように機能するか正確にはわかりません。コードが私のヘッダーを見つけることを許可しますか? エラー メッセージは、問題がこれに関連しているようには見えませんが、これは私が思いついた別の考えでした。

4/14 更新

コンピューターでも奇妙な動作をするようになったので、何かを台無しにしました。フレームワークを再インストールしましたが、新しいエラーが発生しました。

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information:
dyld: launch, loading dependent libraries

Dyld Error Message:
  Library not loaded: /opt/local/lib/libfreetype.6.dylib
  Referenced from: /Volumes/VOLUME/Pong.app/Contents/MacOS/../Frameworks/AllegroTTF-5.0.framework/Versions/5.0.10/AllegroTTF-5.0
  Reason: image not found

私の質問はより一般的になりました.libfreetypeをアプリケーションにバンドルする場合、フレームワークにそれを見つける場所をどのように伝えることができますか?

4

2 に答える 2

1

ああ、私のアプリケーションは他のコンピューターで実行されるようになりました! これが私の問題を解決した手順です。

  • フレームワークの install_name を変更してみましたが、何をしているのかよくわからなかったので、何かを台無しにしたに違いありません。
  • クリーンなスタートを切るために、すべてのフレームワークを再インストールしました。
  • 今回は、各フレームワークの install_name を慎重に変更しました。

sudo install_name_tool -id [インストール名] [パス/to/フレームワーク]

  • この時点で、すべてのフレームワークが正常にロードされましたが、まだ /opt/local/lib で依存関係を見つけようとしています。
  • 依存関係をアプリケーション バンドルに含めるために、コピー ファイルのビルド フェーズに追加しました。
  • 最後に、インストール名ツールを再度使用して、依存関係の検索パスを変更しました。

sudo install_name_tool -change [/old/path/to/library] [/new/path/to/library] [path/to/dependent/framework]

例:最初の質問で最後のエラーを引き起こした libfreetype.6.dylib 依存関係については、次の端末コマンドを使用しました。

sudo install_name_tool -change /opt/local/lib/libfreetype.6.dylib @executable_path/../Frameworks/libfreetype.6.dylib /Library/Frameworks/AllegroTTF-5.0.framework/Versions/5.0.10/AllegroTTF-5.0


私が理解していることから、私の問題のほとんどは、同様の、しかしわずかに異なる問題への回答として与えられた端末コマンドにやみくもに従おうとしたことが原因でした。

実際にいくつかのドキュメントを読むことが、これを理解するための鍵であることが証明されました.今では、アプリケーションを配布しようとする前よりも、フレームワークとライブラリがどのように機能するかについてかなり多くのことを知っています.

ありがとう、スタックオーバーフロー。

于 2013-04-15T01:12:49.307 に答える
0

他のフレームワークを相互参照するフレームワークでは、インストール パスを変更する必要があります。

この場合、AllegroMain-5.0.framework の「/Users/USER/*/Allegro-5.0.framework/Versions/5.0.7/Allegro-5.0」のインストール パスを「@executable_path/../Frameworks/」に変更する必要があります。 Allegro-5.0.framework/Versions/5.0.7/Allegro-5.0".

アプリケーション ビルドを Qt でパッケージ化しているときに、同様の問題が発生しました。

例: QtGui.framework は QtCore.framework を参照します。

name_tool="/Applications/Xcode.app/Contents/Developer/usr/bin/install_Name_tool"
cd "$APPNAME.app/Contents"

$name_tool -change /Users/USERNAME/QtSDK/Desktop/Qt/474/gcc/lib/QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore ./Frameworks/QtGui.framework/Versions/4/QtGui
于 2013-04-14T06:26:01.707 に答える