当我传递编译器标志-mmacosx-version-min = 10.5
时,这意味着什么?我认为这意味着结果二进制文件是x86,而不是ppc,但它是32位还是64位?我正在Snow Leopard上编译,因此默认输出二进制文件是64位。我没有传递-universal
,我认为它不是32位-64位通用二进制文件。
当我传递编译器标志-mmacosx-version-min = 10.5
时,这意味着什么?我认为这意味着结果二进制文件是x86,而不是ppc,但它是32位还是64位?我正在Snow Leopard上编译,因此默认输出二进制文件是64位。我没有传递-universal
,我认为它不是32位-64位通用二进制文件。
这个选项将被放置在头文件中的各种可用性宏所使用。这意味着即使您有一个更新的SDK(即使用10.6 SDK来定位10.5),您也可以要求最低OS版本。在以10.5为目标时使用10.6 API将触发警告,并且API将连接到weak_import属性。
大多数苹果的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位,Intel/64位)进行定位。
由于您正在使用Snow Leopard,因此可以通过传递架构选项来非常简单地定位i386(Intel/32位),ppc(PowerPC/32位)或x86_64(Intel/64位),如下所示:
gcc -arch i386
或者像这样(对于基于配置的项目):CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure
-mmacosx-version-min=...
也会影响C++ STL(GNU或LLVM)的默认选择,因此在这方面,对于编译器和链接器来说同样重要。
经过我的测试,我发现将这个选项传递给链接步骤(例如 -arch)也很重要;因此它不仅会影响宏/预处理(可能会被其他答案推断出来),而且还会有更多的影响。
当传递给编译步骤但未传递给链接步骤时,我发现在 10.5 下无法加载使用 10.6 构建的共享库。
它会触发编译器警告,针对出现在Mac OS X 10.5之后的方法。这与架构无关。