编译c程序时 gcc编译器

来源:互联网 发布:俄罗斯高加索知乎 编辑:程序博客网 时间:2024/06/05 00:59

编译器的作用 -- 把C语言 生成可执行的二进制文件

编译器所做的事情如下:

源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)


在shell窗口 我们只要执行 命令 gcc a.c -o a    就能生成main的可执行文件

gcc 编译器所做的事情

gcc a.c -o a.i -E     -E Stop after the preprocessing stage;  在预编译结束后就停止

gcc a.i -o a.s -S     -S Stop after the stage of compilation proper; 在适当的阶段停止编译!该阶段会把c程序转换成汇编文件

gcc a.s -o a.o -c    -c Compile or assemble the source files, but do not link. 编译或组装这个源程序,但是不链接,这个文件也称之为可从定位二进制文件,obj文件

gcc a.o -o a -lc     给目标文件链接上标准c库,因为c库在系统环境变量里,所以直接这样链接就可以了。如果不写的话,gcc编译器也会自己去环境变量里找的。

这个文档里有些东西写的很好:关于编译器跟程序运行的 点击打开链接

用vim 查看二进制文件  

#vim -b a

:%!xxd       十六进制查看


gcc编译器还有一个优化级别之说

比如

gcc a.c -o a -O0      所谓优化等级越高,优化的细节越多,编译的速度越慢,程序执行的效率越高,调试越困难

gcc a.c -o a -O2     



编译器内部会对这些c变量进行解析,从而生成相对于的机器码.感觉这个是很庞大的东西,应该原理就跟数电里的译码器,编辑器相类似吧。

其他关于gcc的信息就要去man gcc了  看了下基本还能看懂,希望英语跟我差不多的同学也跟我一样坚持微笑

0 0