1

このチュートリアルを使用して iPhone フレームワークを構築しようとしていますが、テスト アプリ (構築されたフレームワークを使用するアプリ) を構築すると、エラーが発生します。

duplicate symbol _objc_unretainedPointer in:
...
8 duplicate symbols for architecture i386

ターミナルでフレームワークのバイナリを呼び出したところ、 / /etcnmを含む通常の実行可能ファイルのシンボルが含まれています。エラーが重複しているのも不思議ではありません。フレームワークには独自の実行可能シンボルがあり、テスト アプリにも同様です。_main_objc_unretainedPointer

_main私の質問は、 /etc シンボルを持たないようにするために、フレームワークの正しい Mach-O タイプは何であるべきかということです。そして、それはどのようにテスト アプリに追加されるべきでしたか?

で、チュートリアルも間違ってる?

私が試したこと: フレームワークの Mach-O Type を Dynamic Library に設定すると、_main/etc シンボルが削除され、テスト アプリは正常にビルドされますが、テスト アプリをシミュレーターで実行するとdyld: Library not loadedエラーが発生します。

4

1 に答える 1

1

私は問題を解決し、セットアップを機能させましたが、タイトルの質問には答えません。

問題は、元の質問のチュートリアル (チュートリアル A) が間違っていたことです。別のチュートリアル(チュートリアル B)で見つけたバンドル ターゲット設定がありませんでした。

Link With Standard Libraries = No

チュートリアルAからは設定されていなかったので、デフォルトでYesになっていました。チュートリアル B を完了し、これを [いいえ] に設定した後、ビルドされたフレームワークを使用するテスト アプリは正常にコンパイルされ、希望どおりに動作しました。

タイトルの質問に答えるには: Mach-O タイプ (少なくともこのケースとチュートリアル A & B の場合) はRelocatable Object Fileである必要があります。

于 2013-04-18T03:22:51.540 に答える