macosx-version-min意味着什么?

时间:2010-05-27 17:47:33

标签: macos g++ 32bit-64bit

当我传递编译器标志-mmacosx-version-min=10.5时,它是什么意思?我认为这意味着结果二进制是x86,而不是ppc,但它是32位还是64位?我正在编译雪豹,所以默认输出二进制是64位。我想,我没有通过-universal,它不是32位64位通用二进制文件。

4 个答案:

答案 0 :(得分:19)

此选项将由放置在标头中的各种可用性宏使用。这意味着即使您拥有更新的SDK(即具有10.6 SDK的目标10.5),您也可以要求最低版本的操作系统。在目标10.5时使用10.6 API将触发警告,API将与weak_import属性链接。

大多数Apple的API标头包含每个类,方法,函数或枚举的可用性宏,以便为每个类声明:

  • 支持的最低操作系统
  • 弃用
  • 不可用
  • ...

宏看起来像:

  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
  • AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
  • ...

对于体系结构,它仅取决于SDK二进制文件中的可用体系结构。例如,使用10.5 SDK,您可以定位四种架构(Intel / 32位,PowerPC / 32位,Intel / 64位,PowerPC 64位),而使用10.6 SDK,您只能针对三种架构(Intel / 32位,PowerPC / 32位,英特尔/ 64位)。

当您使用Snow Leopard时,您可以通过传递这样的架构选项,非常简单地定位i386(Intel / 32bits),ppc(PowerPC / 32bits)或x86_64(Intel / 64bits):

gcc -arch i386

或类似(对于基于配置的项目):

CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure

答案 1 :(得分:11)

-mmacosx-version-min=...也会影响C ++ STL实现(GNU或LLVM)的默认选择,在这方面,它对编译器和链接器同样重要。

答案 2 :(得分:10)

从我的测试中,将此选项传递给链接步骤(如-arch)也很重要;所以它不仅影响宏/预处理(可能从其他答案推断)。

当传递给编译步骤但没有传递给链接步骤时,我发现使用10.6构建的共享库不会在10.5下加载。

答案 3 :(得分:4)

它会触发Mac OS X 10.5之后出现的方法的编译器警告。与建筑无关。