GCC(GNU Compiler Collection)
gcc是一种跨平台的编译器,学会gcc的一些知识,g++也就很容易上手了,操作也都差不多。
不知道打过蓝桥杯的小伙伴有没有注意过官方提供的编译环境,如图。
可以看到,C语言程序就是用gcc来编译链接的。
gcc命令
之前写好了一个hello.c的源文件。
gcc -o
接下来我们用一条最简单的gcc命令编译链接执行一下,发现结果正确。
gcc -o hello hello.c
./hello
-O
-O选项是在编译链接过程中进行优化的,主要有以下选项。
gcc –O0 –o hello hello.c
gcc –O1 –o hello hello.c
gcc –O2 –o hello hello.c
gcc –O3 –o hello hello.c
吸口氧气这题就过了。
相信在洛谷上刷过题的小伙伴们都知道这个梗了吧。解释一下,有一些题TLE了,然后在不修改源代码的情况下开启O2优化,就能很玄学的AC了。O2–>O2–>氧气,突然有点冷。。。
不过99%的TLE都不是开O2能解决的问题,必须要降低时间复杂度才行,这都是题外话了。
至少也证明了一点,O2确实可以使程序更快。
man gcc
/-O
O0是什么优化选项都不开,O1是打开一些,O2,O3以此类推。
顺便提一句,Os是用来缩小程序尺寸的。
-g
产生gdb所必要的符号信息。
gcc -g -o hellog hello.c
-I
假如说一个工程的代码分散在2个源文件和1个头文件中,其中一个源文件引用了一个头文件,那么编译的时候为了不报错,一种最简单的方法就是把源文件和头文件都放在同一目录下。
但是,老师说,这样放在一起是很危险的。头文件最好单独放在一个文件夹中。
那么链接的时候,就不能单纯只把源文件放在-o命令后面了,因此就引出了-I选项。
gcc –I./inc –o hello2 hello2main.c hello2function.c
-I选项就是说在找不到.h文件的时候,去后面的路径里找。
-E
这个选项是用来查看预处理的结果的。
gcc -E hello.c | less
-S
查看汇编代码文件。
gcc –S hello.c
注意,这个汇编代码不是asm而是一种叫GAS的语言。
-c
这个选项是用来编译源文件的。
gcc -c hello.c
gcc -o hello hello.o
ls -l *.o
file hello
ldd hello
总结
gcc的最基本的一些选项就介绍到这里了,下一节是make。