Linux学习日记(十一)——Ubuntu下使用gcc编译器
Ubuntu下使用gcc编译器
gcc是一款linux下的文本编译器,作为一款编译源代码的工具。
- gcc编译器的四个阶段
在gcc对源文件进行编译的过程中需要经过以下四个阶段:
- 预处理(Pre-Processing)
在该阶段,对头文件进行真正导入,对宏定义进行展开。可以使用 -E 参数让gcc 编译器在完成预处理阶段后停止下来。
gcc -E hello.c -o hello.i
2.编译(Compiling)
在编译阶段,gcc编译器会先进行语法检查,在通过检查后就会将源文件编译成汇 编文件。用户可以使用 -S 参数让gcc编译器在完成这一过程后停止下来。
gcc -S hello.i -o hello.s
3.汇编(Assembling)
汇编阶段要进行的工作是将gcc前面过程中生成的汇编文件进行汇编得到二进制 目标代码。用户可以使用 -c 参数让编译器在完成汇编后停止下来。
gcc -c test.s -o test.o
4.连接(Linking)
在者一阶段gcc编译器会将各个二进制模块和动态库、静态库进行链接操作,得到 最终的可执行文件。
gcc test.o -o test
- gcc编译器常用选项
-c
只编译不链接,生成目标文件“.o”
-S
只编译不汇编,生成汇编文件
-E
只进行预编译
-D
定义额外的宏
-O num
编译优化,O后跟的num的取值一般为0~3的范围内进行取值
-g
在可执行文件中包含标准调试信息,用于后期调试
-o file
将file文件指定为输出文件
-v
打印出编译器内部编译各过程的命令行信息和编译器的版本
-I dir
在头文件的搜索路径列表中添加dir路径
- gcc编译器库选项
-static
进行静态编译,链接静态库,禁用动态库
-shared
1、生成动态库
2、进行动态编译,尽量链接动态库,如果没有匹配的动态库会链接同名的静态库
-L dir
在库的搜索路径上添加dir路径
-l name
链接名为libname.a的静态库或者名为libname.so的动态库
-f pic
生成使用相对地址的位置无关的目标代码,然后使用gcc的 -static 选项从该pic 目标文件生成动态库
- gcc编译器警告和出错选项
-ansi
支持符合ansi标准的C程序
-pedantic
允许发出ansi标准所列出的全部警告信息
-pedantic-error
允许发出ansi标准所列出的全部错误信息
-w
关闭所有警告
-Wall
允许发出gcc提供的所有有用的报警信息
-werror
把所有的警告信息转化为错误信息,并在警告发生时终止编译过程
- gcc编译器体系结构相关选项
-mcpu=type
针对不同的cpu使用相对应的cpu指令,可以选择的type有i386、i486、pentium、 i686等
-mieee-fp
使用IEEE标准进行浮点数的比较
-mno-ieee-fp
不使用IEEE标准进行浮点数的比较
-msoft-float
输出包含浮点库调用的目标代码
-mshort
把int类型作为16位进行处理
-mrtd
强行将函数参数个数固定的函数用retNUM返回,节省用函数调用的一条指令
更多推荐
所有评论(0)