たくさんのMatch-Oリンカーエラーにうんざりした後、私はこれが意味することを知りたいです。試行錯誤の代わりに、これらの背後にある概念を知りたいと思います。具体的には、次の違いを知りたいです。
これらは、リンクセクションのMach-Oタイプ設定をクリックしたときに表示されるオプションです。いくつかの小さな定義または適切なコンテンツへのリンクも問題ありません。
Mach-O 、Machオブジェクトファイル形式の略で、実行可能ファイル、オブジェクトコード、共有ライブラリ、動的にロードされるコード、およびコアダンプのファイル形式です。 UNIXユーザーの場合、これはa.out
に似ていますが、改善されています。これは、Mac OSXおよびiPhoneOSライブラリで実行可能ファイルに使用される形式です。
ご存知のように、iOSデバイス(iPhone、iPadなど)のアーキテクチャはARMv6(iPhone 2G + 3G、iPod Touch)とARMv7(iPhone 3GS、iPod Touch 2G + 3G)ですが、Xcodeで使用されるシミュレーターは主にi386プラットフォームで動作します。これは、ライブラリクライアントがシミュレータとデバイスに別々のターゲットを設定する必要があることを意味します。個別のターゲットはほとんどの情報を複製し、含まれている静的ライブラリのみが異なります。したがって、Mach-Oリンカーエラーが発生した場合、xcodeがそのターゲットデバイスのライブラリの1つにリンクするのに問題があることを意味します。その結果、コンパイルは失敗します。
今あなたの定義-
Appleドキュメント、
詳細については、これを確認してください Mach-Oファイルのビルド および Xcodeビルド設定リファレンス
Framework target -> Build Settings -> Mach-O Type
Xcodeヘルプには次の説明があります
Mach-Oタイプ(MACH_O_TYPE)【Mach-Oファイル】
この設定は、生成されるバイナリの形式と、他のバイナリを構築するときにリンクする方法を決定します。
実行可能ファイル:mh_execute。実行可能ファイルとスタンドアロンバイナリであり、リンクすることはできません。
ダイナミックライブラリ:mh_dylib。ダイナミックライブラリはビルド時にリンクされ、必要に応じて自動的にロードされます。
バンドル:mh_bundle。バンドルライブラリは、実行時に明示的にロードされます。
静的ライブラリ:staticlib。静的ライブラリはビルド時にリンクされ、実行時にロードされます。
再配置可能オブジェクトファイル:mh_object。オブジェクトファイルは、ビルド時にリンクされる単一モジュールファイルです。