当我传递编译器标志-mmacosx-version-min=10.5
时,它是什么意思?我认为这意味着结果二进制是x86,而不是ppc,但它是32位还是64位?我正在编译雪豹,所以默认输出二进制是64位。我想,我没有通过-universal
,它不是32位64位通用二进制文件。
答案 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之后出现的方法的编译器警告。与建筑无关。