gcc主要参数
编译过程
linux下常用gcc进行编译的,gcc编译分为4个流程:
- 预处理 Pre-Processing
- 编译 Compiling
- 汇编 Assembling
- 链接 Linking
预处理 Pre-Processing
命令:gcc -E main.c -o main.i
预处理命令是处理源文件中以#
开头的语句。例如展开头文件,替换define
常量等。
编译 Compiling
命令: gcc -S main.i -o main.s
编译阶段gcc对代码进行检查后转换成汇编代码。
汇编 Assembling
命令: gcc -c main.s -o main.o
将汇编代码转换成二进制文件
链接 Linking
命令: gcc main.o -o main
在代码中会用到各种库文件,这些库函数实现并不在当前生成的二进制文件中,因此需要链接到库文件才能正确运行。静态库在这一步直接添加到最终的执行文件中,动态库添加运行时的链接信息。
常用参数
-
-o
: 指定输出文件名 -
-E
: 只产生预处理输出 -
-S
: 只产生汇编输出 -
-c
: 只产生编译输出 -
-v
: 打印详细信息,编译时所有的步骤 -
-Wall
: 启用所有警告 -
-shared
:生成共享库 -
-fPIC
: 产生位置无关的代码,常用于创建共享库,使共享库可以使用任意地址 -
-static
: 生成静态库 -
-On
:-O0
,-O1
,-O2
,-O3
优化等级,-O0
表示不优化,-O3
表示最大程序优化 -
-g
: 产生调试信息,该调试信息可供各调试器使用,-g3
表示调试信息的级别,可以用于调试宏。 -
-ggdb
: 产生gdb调试器使用的调试信息,更适合gdb使用,其他调试器不能使用 -
-x
: 指定输入文件的语言,如c,c++ -
-std=
:指定语言标准,如-std=c++11
,-std=gnu++11
,-std=c99
,-std=gnu99
, -
-I
: 头文件搜索路径 -
-l
:库文件 -
-L
:库文件搜索路径 -
-print-sysroot
:打印sysroot路径 -
-print-search-dirs
:打印gcc的搜索路径,包括安装、程序和库
查看gcc头文件搜索路径
使用-v
参数查看编译过程时会显示头文件的查找路径
gcc -v -E -x c -
: C语言头文件路径
gcc -v -E -x c++ -
: C++头文件路径
或者针对源文件进行gcc -v -E main.c