gcc可以为不同的CPU交叉编译吗?

gcc可以为不同的CPU交叉编译吗?,gcc,compiler-construction,Gcc,Compiler Construction,安装在Fedora16上的gcc是否可以为不同的CPU(比如SPARC)进行交叉编译? 我已经建立了一定的理解,需要一些专家来纠正我,如果我错了。不同的操作系统因其用于访问内核的系统调用不同而不同,或者完全因其使用的内核而不同。这是正确的吗?不同的内核理解访问底层硬件的不同系统调用。二进制文件、可执行文件或程序只是一堆系统调用。因此,每个操作系统都有自己的可执行文件。要在windows上运行的可执行文件不能在linux上运行。通过交叉编译任何windown可执行文件的源代码,我们可以为其他操作系

安装在Fedora16上的gcc是否可以为不同的CPU(比如SPARC)进行交叉编译? 我已经建立了一定的理解,需要一些专家来纠正我,如果我错了。不同的操作系统因其用于访问内核的系统调用不同而不同,或者完全因其使用的内核而不同。这是正确的吗?不同的内核理解访问底层硬件的不同系统调用。二进制文件、可执行文件或程序只是一堆系统调用。因此,每个操作系统都有自己的可执行文件。要在windows上运行的可执行文件不能在linux上运行。通过交叉编译任何windown可执行文件的源代码,我们可以为其他操作系统生成可执行文件。“平台”一词的意思是操作系统。POSIX是UNIX类OSs的特定设计标准。
我们通常为不同的操作系统交叉编译。但是我们也可以为不同的硬件交叉编译吗?例如,对于没有操作系统的微控制器?

否。您不能使用本机(x86)gcc编译不同体系结构的程序文件。为此,您需要特定于该处理器体系结构的交叉编译器gcc

您对OS系统调用的理解是正确的。每个操作系统都有自己的系统调用集,库使用这些系统调用。这些库最终将被翻译成处理器的机器语言


每个处理器体系结构都有自己的指令集,称为指令集体系结构(ISA)。因此,当编译用高级语言(如C)编写的程序时,应该将其ISA转换为机器语言。这项工作由编译器(gcc)完成。编译器只针对一个处理器体系结构。例如,gcc用于x86处理器。因此,如果您想为x86机器中的不同处理器使用编译器,您应该使用该处理器的交叉编译器。

您必须构建这样的版本。这是将
gcc
移植到新平台过程的一部分。您构建一个交叉编译的版本,然后交叉编译该版本,然后在新平台上测试该版本,调试、清洗并重复。

上次我需要交叉编译器时,我发现这本指南很有帮助:@Saurabh:我写了一篇关于为Sparc获取交叉编译器和在Qemu emulator上运行可执行文件的小教程。你可能会发现它很有用你的意思是说我只能在我的intel机器上构建gcc SPARC版本吗。但只能在SPARC上运行和测试吗?@Saurabh不,我根本不想这么说。我想说的正是我所说的。您可以在Intel上为SPARC构建交叉编译器,在Intel上运行它,使用它编译自己,然后在SPARC上运行结果。好的。。因此,我可以在我的英特尔计算机上为不同的CPU构建、安装和运行编译器。唯一的问题是,输出只能在目标CPU上运行和测试,这非常符合逻辑。。谢谢你的时间和耐心。。