Gcc 编译器如何跨平台(硬件)?
我刚刚意识到二进制编译器将源代码转换为目标平台的二进制代码。有点明显。。。但是,如果一个编译器是这样工作的,那么同一个编译器如何能用于不同的系统,如x86、ARM、MIPS等 难道他们不应该“知道”硬件平台的机器语言,从而知道如何构建二进制文件吗?编译器(如gcc)是否知道所支持的每个平台的机器语言 这个系统是如何实现的,一个编译器是如何同时针对这么多平台进行优化的?是的,他们必须“了解”他们支持的每个平台的机器语言。这是生成机器代码所必需的。然而,编译是一个多步骤的过程。通常,编译的第一步对于大多数体系结构都是通用的 摘自维基百科 编译器的结构 编译器在高级语言中桥接源程序 具有底层硬件的语言 编译器需要Gcc 编译器如何跨平台(硬件)?,gcc,compiler-construction,compilation,cross-platform,Gcc,Compiler Construction,Compilation,Cross Platform,我刚刚意识到二进制编译器将源代码转换为目标平台的二进制代码。有点明显。。。但是,如果一个编译器是这样工作的,那么同一个编译器如何能用于不同的系统,如x86、ARM、MIPS等 难道他们不应该“知道”硬件平台的机器语言,从而知道如何构建二进制文件吗?编译器(如gcc)是否知道所支持的每个平台的机器语言 这个系统是如何实现的,一个编译器是如何同时针对这么多平台进行优化的?是的,他们必须“了解”他们支持的每个平台的机器语言。这是生成机器代码所必需的。然而,编译是一个多步骤的过程。通常,编译的第一步对于
简而言之,跨硬件编译器发出代码的“中间表示”,这是硬件不可知的,然后通过本机工具链对其进行自定义。编译器通常首先生成当前机器无法理解的数据,但可以使用另一个编译器将其迁移到destiny机器。接下来,再次“编译”目标代码,并将其链接到目标机器的外部库 TL;DR:是的,编译器知道目标代码,但您可以在其他硬件中编译
我建议您阅读附加的链接以获取信息。每个平台都有自己的工具链,工具链包括gcc、gdb、ld、nm等 现在让我们以gcc为例。GCC源代码有很多层,包括依赖于体系结构的部分和独立的部分。依赖于体系结构的部分包含处理特定于体系结构的事情的过程,如堆栈、函数调用和浮点操作。我们需要交叉编译特定架构(如ARM)的gcc源代码。您可以在此处查看其步骤以供参考:- 此依赖于体系结构的部分负责处理机器语言操作。“编译器(如gcc)是否知道所支持的每个平台的机器语言?”gcc的单一版本不会,因为它将针对特定的CPU系列。但GCC源代码树中存在对所有这些平台的支持,因此您可以为每个目标构建GCC版本。