GNU C Compiler 多平台编译器,是GNU的代表作之一。
GCC编译器可以编译链接C\C++\汇编成可执行文件,可执行文件没特殊后缀,看属性。
预处理 编译 汇编 链接
Gcc通过后缀来区分不同类型文件
.c C语言源代码文件
.a库文件 由目标文件构成的库文件
.C .cc .cxx C++源代码文件
.h 头文件
.i 已经预处理过的C源代码文件
.ii 已经预处理过的C++源代码文件
.o 编译后的目标文件
.s 汇编语言源代码文件
.S 经过预编译的汇编语言源代码文件
预处理:把宏展开
-o 指定输出的可执行文件的文件名,如果没有,则默认输出文件名字为:a.out。 gcc hello.c -o hello
-c 只编译,不连接成为可执行文件,编译器只是由输入的.c等源文件代码,生成.o为后缀的目标文件。 gcc -c hello.c
-g产生调试工具(GNU的gdb)所必要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项。 gcc -g hello.c -o hello
-O -O2:对程序进行优化,后面的优化程度更深。
gcc optimize.c -o optimize
time ./optimize
gcc -O optimize.c -o optimize
time ./optimize
对比两种,优化后,明显变好。
-Idirname:将dirname所指出的目录加入到程序头文件目录列表中。
C程序中的头文件包含两种情况:
#include <A.h>
#include "B.h"
对于<>,预处理程序cpp在系统预设的头文件目录(/usr/include)中搜寻相应的文件;
对于“”,cpp在当前目录中搜寻头文件。如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。
例如: gcc foo.c -I/home/include -o foo
-Ldirname:将dirname所指出的目录加入到库文件的目录列表中。在默认状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后再到系统预设路径中寻找。
-lname 在连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接名为libm.a的数学函数库。
例:gcc foo.c -L/home/lib -lfoo -o foo
-static :静态连接库文件
默认是动态链接。
编译选项:
-Wall :生成所有警告信息
-w : 不生成任何警告
-DMACRO:-DYES:相当于在程序中使用#define YES
#include <stdio.h>
//#define YES
void main()
{
#ifdef YES
printf("hello");
#endif
}
运行命令:
gcc -DYES hello.c -o hello
./hello
则,可以输出hello。
000编程基础----GCC程序编译