现代编译器常见的编译过程: 源文件-->预处理-->编译/优化-->汇编-->链接-->可执行文件
对于gcc而言:
第一步 预处理
命令:
gcc -o test.i -E test.c
或者 cpp -o test.i test.c (这里cpp不是值c plus plus,而是the C Preprocessor)
结果: 生成预处理后的文件test.i(可以打开后与预处理前进行比对,当然长度会吓你一跳)
作用: 读取c源程序,对伪指令和特殊符号进行处理。包括宏,条件编译,包含的头文件,以及一些特殊符号。基本上是一个replace的过程。
第二步 编译及优化
命令:
gcc -o test.s -S test.i
或者 /路径/cc1 -o test.s test.i
结果: 生成汇编文件test.s(可打开后查看源文件生成的汇编码)
作用:通过词法和语法分析,确认所有指令符合语法规则(否则报编译错),之后翻译成对应的中间码,在linux中被称为RTL (Register Transfer Language),通常是平台无关的,这个过程也被称为编译前端。编译后端对RTL树进行裁减,优化,得到在目标机上可执行的汇编代码。gcc采用as 作为其汇编器,所以汇编码是AT&T格式的,而不是Intel格式,所以在用gcc编译嵌入式汇编时
[Pthread] Gcc 编译过程
最新推荐文章于 2025-04-29 15:44:28 发布