gcc学习笔记

Published on with 47 views

gcc的使用

  • 预处理(Preprocess)

  • 编译(Compilation)

  • 汇编(Assembly)

  • 链接(Linking)

1.预处理

对源程序中的伪指令(以#开头的指令)和特殊符号进行处理的过程。伪指令包括宏定义指令,条件编译指令和头文件包含指令,gcc对C源文件进行预处理之后,会输出.i文件。

  1. 删除所有#define,并且展开所有宏定义。

  2. 处理所有条件编译指令,如#if,#deif。

  3. 处理#include预编译指令,将被包含的文件插入指定位置,这个过程递归进行,被包含的文件还可能包含其他文件。

  4. 删除所有的注释。

  5. 添加行号和文件标识,便于产生调试用的行号信息,以及产生编译错误和警告时能够显示行号信息。

  6. 保留所有#pragma编译器指令,因为编译器需要他们。

预编译实例

gcc -E text.c -o text.i

2.编译

编译过程就是把预处理完的文件进行一系列词法分析,语法分析,,语义分析及优化后生成相应的汇编文件,默认不生成这个汇编文件,-S 选项输出汇编文件

编译实例

gcc -S text.i -o text.s

汇编语言是一种低级的通用编程语言

3.汇编

将汇编代码转变成机器可以执行的二进制代码,每一个汇编语句都对应着一条机器指令,汇编过程只是根据汇编指令和机器指令的对照表翻译汇编生成的文件后缀名为 .o

汇编实例

gcc -C text.s -o text.o

4.链接

解决多个文件之间的引用问题。

gcc text.o -o text

gcc 编译不需要C库文件的C程序

gcc text.cpp -o text

gcc编译需要C库文件的C程序

gcc text.cpp -l stdc++ -o text

gcc 常见选项

-x

-- 断剑重铸之日,骑士归来之时.
Responses