编译器选项: -arch
 
设置改进/限制代码生成或交叉编译的目标架构

语法

-arch < architecture >

参数

architecture
目标架构。识别值:

      • 相关32位x86:
        • 386
        • 486(默认为x86)
        • 586
        • 686
        • athlon
        • athlon-xp
        • athlon-fx
        • k8-sse3
        • pentium-mmx
        • pentium2
        • pentium3
        • pentium4
        • pentium4-sse3
      • 相关64位x86_64:
        • x86_64, x86-64, amd64
      • 与32位ARM相关:
        • armv6
        • armv7-a(ARM的默认值)
      • 与64位ARM(AArch64)有关:
        • aarch64
      • 其他:
        • native:用于编译运行编译器的架构。
        • 3264:用于快速交叉编译到32位或64位版本的默认架构。

说明

-arch编译器选项设置目标CPU体系结构。这可以用于多种用途:

    • 改进代码生成例如:您可以使用-arch 686来覆盖默认-arch 486,并且编译器在某些情况下会通过使用i486(或其他i686以上的CPU)上不可用的某些指令来生成更快的代码。
    • 限制代码生成;例如:您可以使用-arch 386将编译器限制为仅使用i386兼容指令。
    • 交叉编译;例如:您可以在32位x86系统上使用-arch x86_64交叉编译为64位x86_64。
-arch设置对代码生成的确切影响取决于正在使用的代码生成后端.在某些情况下,x86 ASM后端(-gen gas)处理-arch设置并相应调整代码生成。当使用GCC后端(-gen gcc)时,指定的架构将通过gcc -march=<...>传递给gcc,导致gcc为指定的体系结构生成代码。

但是,-arch仅影响新生成的代码,而不影响预编译代码,例如FreeBASIC运行时库或lib/目录中的任何其他库。例如,使用-arch 386不一定能够获得纯i386可执行文件 - 它还取决于如何编译所有要链接的库。

-arch 32-arch 64快捷方式与gcc的-m32/-m64选项类似。在32位架构上,-arch 64是交叉编译为默认64位版本架构的缩写。从32位x86到64位x86_64或32位ARM到64位AArch64),-arch 32什么都不做。在64位系统上,相反,-arch 32交叉编译为默认的32位架构,而-arch 64不执行任何操作。

-arch native快捷方式类似于gcc的-march=native选项。在x86上,它使fbc根据cpuid指令及其可用性或结果自动尝试检测主机CPU。在其他体系结构中,目前只能使用编译器本身构建的架构。under -gen gcc这将使用gcc -march=native.

指定与本机架构不兼容的-arch设置将触发交叉编译,就像-target选项一样,只不过只有目标架构而不是目标操作系统被更改。


参考