本文脉络
一、使用gcc命令来编译.c源程序
1、gcc编译过程:预处理->编译->汇编->链接
gcc支持的后缀
gcc常用选项
一步编译、连接
gcc无需加选项
对应gcc代码:gcc hello.c –o hello
1.1、预处理 -E
**作用:**对头文件和宏定义等进行处理
对应gcc代码:gcc –E hello.c –o hello.i
1.2、编译 -S
**作用:**检查代码是否有语法错误,并将其翻译成汇编语言
对应gcc代码:gcc –S hello.i –o hello.s
1.3、汇编 -c
**作用:**将编译阶段生产的汇编.s文件,处理为.o目标文件
对应gcc代码:gcc –c hello.s -o hello.o
1.4、链接
**作用:**将多个.o目标文件组装成最后的可执行文件
对应gcc代码:gcc hello.o -o hello
1.5、运行 ./文件名
对应代码:./文件名
Ps:gcc编译多文件举例gcc -o main main.c sub_add.c unsgn_pow.c -I/include -L. -lmymath
其中,-I ./include 告诉gcc在“./include”目录下搜寻头文件
**-L. **表示要链接的库,库名为libmymath.a,链接时写为-lmymath
二、gcc扩展
1、gcc——警告选项
使用举例
$ gcc –Wall warning.c –o warning
warning.c:4 警告:“main”的返回类型不是“int”
warning.c: 在函数“main”中:
warning.c:7 警告:在无返回值的函数中,“return” 带返回值
warning.c:5 警告:未使用的变量“tmp”
2、gcc——优化选项
gcc通过编译选项“-On”来控制优化代码的生成(n是一个代表优化级别的整数,取值1-3),不同的优化级别对应不同的优化处理工作
- “-O1”主要进行线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化
- “-O2”除了完成所有“-O1”级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度
- -O3”则还包括循环展开和其他一些与处理器特性相关的优化工作
- 使用优化选项的场合:程序发行
- 不适合使用优化选项的场合:程序开发