1.前言
在 Linux 中,C 语言用 gcc 编译;C++ 用 g++ 编译。
2.gcc编译器基本语法
1.gcc filename.c
编译filename.c默认生成a.out可执行程序2.gcc filename.c -o filename
编译filename.c指定生成文件名为filename的可执行程序
3.gcc编译的4个流程步骤
(ESc 注意大小写,ES写成小写的话会导致汇编出错)
1.预处理
处理和#号相关的代码
1.头文件展开 #include
2.宏定义替换 #define
3.条件编译展开 #if #endif #ifndef #ifdef
gcc -E filename.c -o filename.i
2.编译
将C语言代码编译成汇编代码
gcc -S filename.c -o filename.sgcc -S filename.i -o filename.s
3.汇编
将汇编代码编译成二进制程序
gcc -c filename.c -o filename.ogcc -c filename.s -o filename.o
4.链接
将多个二进制程序链接成为一个可执行程序
gcc filename.c -o filenamegcc filename.o -o filename
记忆:
对于 预处理、编译、汇编 三步的选项分别为 ESc
,可以与键盘上的 esc
键来帮助记忆,区别前两个字母是大写。而生成的文件后缀分别为 iso
可以利用国际标准化组织(ISO)来记忆。
4.gcc选项汇总
- -E :只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
- -S :编译到汇编语言,不进行汇编和链接
- -c :编译到目标代码
- -o :文件输出到文件
- -static :此选项对生成的文件采用静态链接
- -g :生成调试信息。GNU 调试器gdb可利用该信息
- -shared :此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库
- -O0 :不做任何优化,这是默认的编译选项。
- -O1 : 对程序做部分编译优化
- -O2 :是比O1更高级的选项,进行更多的优化
- -O3 :比O2更进一步的进行优化
- -w :不生成任何警告信息
- -Wall: 生成所有警告信息