33

多数のMatch-Oリンカーエラーにうんざりした後、私はこれが意味することを知りたいです。試行錯誤の代わりに、これらの背後にある概念を知りたいと思います。具体的には、次の違いを知りたいです。

  1. 実行可能
  2. ダイナミックライブラリ
  3. バンドル
  4. 静的ライブラリ
  5. 再配置可能オブジェクトファイル

これらは、リンクセクションのMach-Oタイプ設定をクリックしたときに表示されるオプションです。いくつかの小さな定義や適切なコンテンツへのリンクも問題ありません。

4

2 に答える 2

42

Mach-Oは、Machオブジェクトファイル形式の略で、実行可能ファイル、オブジェクトコード、共有ライブラリ、動的にロードされるコード、およびコアダンプのファイル形式です。UNIXユーザーの場合、これは似ていますa.outが、改善されています。これは、MacOSXおよびiPhoneOSライブラリで実行可能ファイルに使用される形式です。

ご存知のように、iOSデバイス(iPhone、iPadなど)のアーキテクチャはARMv6(iPhone 2G + 3G、iPod Touch)とARMv7(iPhone 3GS、iPod Touch 2G + 3G)ですが、Xcodeで使用されるシミュレーターは主にi386プラットフォームで動作します。これは、ライブラリクライアントがシミュレータとデバイスに別々のターゲットを設定する必要があることを意味します。個別のターゲットはほとんどの情報を複製し、含まれている静的ライブラリのみが異なります。したがって、Mach-Oリンカーエラーが発生した場合、それはxcodeがそのターゲットデバイスのライブラリの1つにリンクするのに問題があることを意味します。その結果、コンパイルは失敗します。

今あなたの定義-

  1. 実行可能ファイル-コンパイルされたマシンを対象としたプログラムで、バイナリ形式で実行する準備ができています。
  2. ダイナミックライブラリ-実行時にリンクされます-ダイナミックライブラリへの参照を持つプログラムは、起動時(またはオンデマンド)にロードされ、ライブラリとリンクされます。
  3. バンドル-バンドル識別子により、iOSとOSXはアプリのアップデートを認識できます。それはそれにアプリでユニークな存在感を与えます。
  4. 静的ライブラリ-ファイルはビルド時にリンクされます。コードが実行可能ファイルにコピーされます。プログラムによって参照されていないライブラリ内のコードは削除されます。静的ライブラリのみを持つプログラムには、実行時に依存関係はありません。
  5. 再配置可能オブジェクトファイル-ダイナミックライブラリの別の言葉です。ダイナミックライブラリとリンクすると、ライブラリがメモリ内のどこにロードされているかに基づいて、そこに含まれる関数のアドレスが計算されます。含まれている関数のアドレスはリンク時に決定されないため、これらは「再配置可能」です。(静的ライブラリでは、アドレスはリンク時に計算されます。)
于 2012-10-26T07:13:51.970 に答える
7

アップルのドキュメントによると、

Mach-Oタイプの定義

詳細については、これを確認してください。Mach-OファイルのビルドとXcodeビルド設定リファレンス

于 2012-10-26T07:14:43.213 に答える