您的位置:首页 > 其它

编译简介

2013-04-21 23:10 176 查看
平台:linux

编译器:GCC

源文件:hello.c

到底GCC在将源文件编程可执行文件的时候做了什么工作呢,首先你得

指导GCC的常用命令吧,GCC在工作的步骤为:

1. 预编译

命令: gcc -E hello.c -o hello.i

或者 cpp hello.c > hello.i

然后你就可以gedit hello.i来打开它。好好比较下两者

的内容

主要作用:1. 展开所有的#define宏,就是在用到宏的地方进行替换。

同时删除该宏

2. 处理所有的条件编译选项,包括#if 等等

3. 处理所有的#include指令,直接在包含的位置展开文件

如果被包含的文件里面还包含其它的文件,那么递归展开

4. 删除所有的注释

5. 添加行号和文件名注释,以便在编译的时候输出信息

6. 保留#pragma宏,因为编译器需要使用

2. 编译

命令:gcc -S hello.i -o hello.s

或者 调用你的gcc目录下的cc1程序,gcc目录一般在/usr/lib/下

cc1 hello.i > hello.s

然后你还是可以gedit hello.s来打开它,看看里面汇编的代码

主要作用:1. 编译的过程是词法分析,语法分析,语义分析,目标代码

生成,主要是用来生成汇编代码。好好看看编译原理方面

的内容即可。

3. 汇编

命令:gcc -c hello.s -o hello.o

或者 as hello.s -o hello.o

然后生成了常见的.o文件了,再怎么办?gedit打不开的,因为

事实上.o文件已经算是一种可执行文件了,所以可以采用工具

objdump ,readelf来进行查看。具体工具使用后面会说到。

主要作用:1. 翻译汇编代码到目标代码,然后生成中间文件

4. 链接

命令:ld

详细的命令比较复杂,链接是是程序运行过程中最复杂的一个部分了

目的就是将不同的.o文件或者库文件链接在一起,形成一个真正可执

行的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: