gcc编译器
gcc编译器是GNU开源组织发布的UNIX/Linux下的多平台的编译器。它可以将c、c++等多种语言编写的源文件编译、链接成可执行文件。 gdb是GNU下的调试器。
gcc可以编译c、c++、object c、java等多种语言,而且又是跨平台的,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件。很适合嵌入式。
编译四过程
1.预处理
2.编译
3.汇编
4.链接
gcc提供30多条警告信息和三个警告级别。gcc通过文件后缀名区别文件的类别。
.c c语言源文件
.a 由目标文件构成的档案库文件
.C .cc .cxx c++源文件
.h 头文件
.i 经过预处理过的c源代码文件
.ii 经过预处理过的c++源代码文件
.m Objctive -C 源代码
.o 编译后的目标文件
.s 汇编语言源代码文件
.S 经过预编译的汇编语言源代码文件
-o filename 指定输出文件名,这一项非必须,如果没指定,默认为a.out
-c 只编译不链接,生成目标代码.o
-S 只编译不汇编,生成汇编代码
-E 只进行预编译,不做其他处理
-g 在生成的可执行程序中包含标准调试信息
-v 打印编译器内部编译各过程的命令行信息和编译器的版本号
-I dir 在头文件的搜索路径列表把dir目录加进去(一般的头文件搜索路径是/usr/inclde)
-L dir在库文件的搜索路径列表把dir目录加进去(一般库文件的搜索路径是/usr/lib)
-static 链接静态库
-library 链接名为library的库文件
-Dmacro 定义指定的宏,使得#ifdef的时候有这个宏
-O、-O2、-O3 将优化状态打开,该选项不能与-g选项联合使用(优化就不包括调试信息了)
-Wall / -Werror 将发生警告时取消编译操作,即把警告当成错误
-w 禁止所有的警告
-pedantic 严格要求符号ANSI标准
如何使用gcc
gcc编译器的功能强大,包括警告提示功能、代码优化、链接库、使用管道加速
在linux下(比如hello.c)
1.进入代码文件所在的文件夹
2.gcc hello.c
改变可执行文件名 gcc -o hello hello.c
- ./a.out (./表示执行可执行文件)
gcc分步编译
1.第一步是预处理阶段
这一阶段会生成.i文件(它处理宏替换,处理预处理宏,头文件内容拷贝)
要生成这个文件的话需要下面的命令(查看文件 cat hello.i)
gcc -E hello.c -o hello.i
2.第二步 编译阶段
把 .i文件变成.s文件
要生成这个文件需要下面的命令
gcc -S hello.i -o hello.s
3.第三步 汇编阶段
把.s文件转化成.o文件
要生成这个文件需要下面的命令
gcc -c hello.s -o hello.o
4.第四步 链接阶段
将.o文件(机器代码文件)和其他机器代码文件或库文件,汇集成一个可执行的二进制代码文件。
要生成这个文件需要下面的命令
gcc hello.o -o hello
警告提示信息
gcc -pedantic hello.c -o hello(输入命令的时候按tab键可以自动补齐)