Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GCC只能为一个特定的体系结构和操作系统编译代码吗?_Gcc - Fatal编程技术网

GCC只能为一个特定的体系结构和操作系统编译代码吗?

GCC只能为一个特定的体系结构和操作系统编译代码吗?,gcc,Gcc,GCC是从不同编程语言生成机器代码的编译器集合。为此,您必须编译编译器以在您的体系结构和操作系统上运行。但您还必须定义生成的机器代码和文件格式 现在我的问题是: GCC的输出文件是否仅可在GCC编译时配置 GCC是否可以编译为支持多种体系结构和文件格式 gcc和binutils设计用于一次构建一个体系结构/系列。因此,如果您将它们构建为ARM的交叉编译器,则无法构建mips,但您可以有多个/多个安装,因此您也可以构建一个以mips为目标的安装并使用该安装 clang/llvm如果您构建时不告诉它

GCC是从不同编程语言生成机器代码的编译器集合。为此,您必须编译编译器以在您的体系结构和操作系统上运行。但您还必须定义生成的机器代码和文件格式

现在我的问题是: GCC的输出文件是否仅可在GCC编译时配置


GCC是否可以编译为支持多种体系结构和文件格式

gcc和binutils设计用于一次构建一个体系结构/系列。因此,如果您将它们构建为ARM的交叉编译器,则无法构建mips,但您可以有多个/多个安装,因此您也可以构建一个以mips为目标的安装并使用该安装


clang/llvm如果您构建时不告诉它不要,它将为它知道的所有目标构建一个工具。这个工具可以让您使用一个工具到达任何受支持目标的对象级别,但链接是另一个故事,您需要告诉它如何构建其链接器(然后我不记得链接器是否支持任何目标或一个目标)。您可以使用binutils为clang/llvm组装/链接(然后您肯定有一个单一的目标组装器/链接器)。

一次是的,一个gcc构建是针对一个目标的,尽管与arm类似,这可能意味着许多实际的架构,但在arm保护伞内。如果您想要多个体系结构,那么您需要多个gnu构建。文件格式不是其中的一部分,您只需使用objcopy转换为各种选项。是的,这是正确的,如果您执行-save temps,您可以看到中间文件,gcc本身是真正编译器的前端,在一个大文件中对include和defines进行一些预处理,然后真正的编译器就可以在其中工作,并输出asm,然后将其馈送至汇编程序,并将对象馈送至链接器,除非您告诉gcc不要执行这些操作。它是一个工具链,基本上是一个编译器、一个编译器、一个链接器,以及链接在一起的工具。另一方面,一个简单/正常的设计llvm(虽然仍然简单/正常),但作为一个整体设计,两者的前端都被编译成一个中间代码,两者都有,但在llvm的情况下,您可以使用itermediate代码,您可以保存它,甚至可以用该语言编写程序。可以进行其他工具无法完成的跨项目/模块优化,然后最终将其转换为asm或对象,然后链接。无股票期权llvm构建将为您提供所有目标,因此您至少可以为任何可能的目标构建asm,现在您是否可以将其转换为对象或不适用于主机平台的最终二进制文件,这是另一个故事,我不再对它进行太多的处理,但是我会使用binutils来完成由clang/llvm构建的项目,你可以对任何目标使用相同的clang/llvm,而不必对该工具进行每个目标的构建。这是我关于gcc/bunutils主题的观点,它是从通用源代码构建特定于目标的编译器,二进制文件(工具链本身)是特定于目标的,使用单独的目录存放您可以拥有任意多个二进制/目标集的文件。使用llvm/clang,您只需要一个二进制文件就可以完成大部分工作,也许所有工作都需要,也许我在很久以前就没有想到这一点。它本身就是一种多目标工具。如果愿意,您可以为所有目标的一个或一个子集构建它