macosx-version-min意味着什么?

Qui*_*ncy 25 macos g++ 32bit-64bit

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

Lau*_*ble 20

此选项将由放置在标头中的各种可用性宏使用.这意味着即使您拥有更新的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
Run Code Online (Sandbox Code Playgroud)

或者像这样(对于基于配置的项目):

CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure
Run Code Online (Sandbox Code Playgroud)


Kri*_*ege 11

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

  • 确实.这对于Mavericks来说尤为重要,因为默认的C++ STL lib发生了变化. (3认同)

qu1*_*0t3 10

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

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


Nik*_*uhe 5

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