答案 0 :(得分:6)
编译器如何知道我的CPU指令集?
大多数编译器只知道如何为特定CPU(或少数CPU)发出代码。每个目标CPU都要求有人为它编写编译器后端,并且该任务非常重要。
GCC支持各种各样的目标,但即使是GCC也只能为少数目标发布代码。换句话说,您可以构建GCC以发出x86_64
和i*86
处理器的代码,并且您可以构建另一个副本以发出PowerPC
的代码,但是您无法构建单个GCC这将产生所有三个代码。
任何参考以理解汇编程序,链接器和加载器的工作
谷歌搜索上述条款导致我here。
答案 1 :(得分:5)
基本上,每个硬件/软件组合都需要自己的编译器。因此,即使您可能编写C代码以便在Windows机器上编译和运行,但与Apple机器的C编译器相比,您仍然需要一个与其他实现不同的编译器。
简而言之,有些编译器可以生成与运行硬件代码不同的硬件代码。一个简单的例子是Arduino产品。 Arduino IDE在Windows(和其他)机器上运行,但代码是为Arduino板上的Atmel微处理器编译的。此外,每种电路板样式(UNO等)都有不同风格的Atmel微处理器,这就是为什么在IDE中你必须确定草图的目标,以便编译器可以进行必要的调整以运行特定的硬件(指令集)。
这个想法也适用于汇编程序和链接器(可能稍微不那么多)。