gcc
gcc编译器,将C/C++代码编译成二进制的可执行文件。gcc编译过程可以简单分为,预处理,编译,汇编,链接。在这4个过程中会产生若干中中间文件。
.c(C源文件) .C .cc .cxx(C++源文件)// 源代码文件 --预处理-->
.i (对应.c) .ii(.C .cc .cxx) // ----汇编--->
.s // ----预编译---->
.S // ----编译----->
.o // -----链接---->
.a .so 可执行文件
gcc 通过文件后缀识别文件类型
gcc使用
gcc编译选项非常多根本记不住,所以只要记住常用的就好了。需要用的时候在去查。
基本用法
gcc [option] [filenames]
option:编译器所要的编译选项
filenames:要编译的文件名
-o output_filename
作用是指定输出文件名(可执行文件),如果不指定输出文件名就会输出默认文件名a.out。
-c
只编译,不链接,即不生成可执行文件。编译器最终输出文件是.o文件,目标文件。
-g
生成调试有关的符号信息。如果要使用gdb调试就必须添加这个选项。调试信息会使程序体积变大,运行变慢。
-O
对程序进行优化。
-O2
对程序进一步优化。
-I dirname
将dirname所指出的目录加入到程序头文件目录列表中。
C程序头文件包含有两种形式
- #include <>
- #include “”
对于<>,预处理程序cpp在系统预设头文件目录中(如/usr/include)中搜索相应文件。而对于“”,cpp在当前目录中搜寻头文件。这个选项是告诉cpp,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。
-L dirname
将dirname所指出的目录加入库文件中的目录列表中。在默认状态下,链接程序ld在系统的预设路径中/usr/lib寻找所需的库文件,这个选项告诉链接程序,首先到-L指定的目录中去寻找,然后在到系统的预设路径中寻找。
-l name
在链接的时候装载名字为 libname.a的函数库,该函数库位于系统预设目录或者由-L选项确定目录下。例如,-lm表示链接名为libm.a的数学函数库。
-static
静态链接程序。
-Wall
生成所有警告信息
-w
不生成任何警告信息
-DMACRO
定义预编译宏