web-dev-qa-db-ja.com

macosx-version-minは何を意味しますか?

コンパイラフラグを渡すと-mmacosx-version-min=10.5、 どういう意味ですか?結果のバイナリがppcではなくx86であることを意味すると思いますが、32ビットですか64ビットですか?ユキヒョウでコンパイルしているので、デフォルトの出力バイナリは64ビットです。私は合格していません-universal、32ビット-64ビットのユニバーサルバイナリではないと思います。

26
Quincy

このオプションは、ヘッダーに配置されたさまざまな可用性マクロによって使用されます。つまり、最新のSDK(つまり、10.6SDKで10.5をターゲットにする)を使用している場合でも、OSの最小バージョンが必要になる可能性があります。 10.5をターゲットにしているときに10.6APIを使用すると、警告がトリガーされ、APIはweak_import属性にリンクされます。

ほとんどのAppleのAPIヘッダーには、クラス、メソッド、関数、または列挙ごとに、それぞれを宣言するための可用性マクロが含まれています。

  • サポートされている最小OS
  • 非推奨
  • 利用できない
  • .。

マクロは次のようになります。

  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
  • .。

アーキテクチャに関しては、SDKのバイナリで使用可能なアーキテクチャにのみ依存します。たとえば、10.5 SDKでは、4つのアーキテクチャ(Intel/32ビット、PowerPC/32ビット、Intel/64ビット、PowerPC 64ビット)をターゲットにできますが、10.6 SDKでは、3つのアーキテクチャ(Intel/32ビット、PowerPC/32ビット、 Intel/64ビット)。

Snow Leopardを使用しているため、次のようなアーキテクチャオプションを渡すだけで、i386(Intel/32ビット)、ppc(PowerPC/32ビット)、またはx86_64(Intel/64ビット)のいずれかをターゲットにできます。

gcc -Arch i386

またはこのように(構成ベースのプロジェクトの場合):

CFLAGS="-Arch i386" LDFLAGS="-Arch i386" ./configure
19

-mmacosx-version-min=...は、C++ STL実装(GNUまたはLLVM)のデフォルトの選択にも影響します。この点で、コンパイラーとリンカーにとっても同様に重要です。

11

私のテストから、このオプションをリンクステップ(-Archなど)に渡すことも重要です。したがって、マクロ/前処理に影響を与えるだけではありません(他の回答から推測される場合があります)。

コンパイルステップに渡されたがリンクステップには渡されなかった場合、10.6でビルドされた共有ライブラリは10.5ではロードされないことがわかりました。

10
qu1j0t3

Mac OS X10.5以降に登場したメソッドに対してコンパイラ警告をトリガーします。建築とは何の関係もありません。

4
Nikolai Ruhe