本文共 835 字,大约阅读时间需要 2 分钟。
平台: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文件或者库文件链接在一起,形成一个真正可执 行的文件。 转载地址:http://yshvb.baihongyu.com/