本文共 1090 字,大约阅读时间需要 3 分钟。
一、分析[-v] 打印出来的代码[生成编译]
/usr/lib/gcc/x86_64-linux-gnu/8/cc1 -quiet -v -imultiarch x86_64-linux-gnu welcome.c -quiet -dumpbase welcome.c -mtune=generic -march=x86-64 -auxbase welcome -version -o /tmp/ccBwcsMD.s
注意1:这个将“.c”文件是input,“-o”输出文件将它临时存储成“.s”文件。
注意2:以上是类似与gcc -S -o 的参数。
二、接着分析后面的打印的代码文件[生成汇编]
as -v --64 -o /tmp/ccTEFvJw.o /tmp/ccBwcsMD.s
注意1:这里的“.s”文件是前面“-o”(output)输出分析出来的。
注意2:简略写成:as -o ccTEFvJw.o ccBwcsMD.s(生成汇编文件)。
注意3:以上的生成汇编命令是 gcc -c,这个“-c”相当于间接的调用as。
注意4:“-c”参数只能把“.s”翻译成“.o”文件,不可能把“.c”翻译成“.o”。
/usr/lib/gcc/x86_64-linux-gnu/8/collect2 -o build +其他链接文件
注意1:以上类似与gcc -o 参数。
先编译--->再汇编--->最后链接。
2.gcc -c -o
注意:“.o”是一个二进制文件。其实就是将人看懂的文件翻译成机器懂的内容。
3.gcc -o
注意1:cpp -o 类似与gcc -E。
注意2:当生成了“.i”文件后才是生成“.s”文件。
#include <stdio.h> #define N 20 int main(int argc,char* argv[]){ char ch[N] = "hello!"; printf("Welcome,%s\n",ch); return 0; } |
2.使用gcc -E 命令输出
3.查看build.i 文件
注意1:这里写的预处理指令没有了,其实预处理做的就是文件替换。
注意2:在编译的过程中已经没有预处理的文件替换过程了。
注意3:define 和 include 不是关键字因为它是预处理使用的,而关键字是在编译过程中使用的。
转载地址:http://iduti.baihongyu.com/