1. gcc: 全名 GNU C Compiler
gcc编译器 能将C, C++, 汇编程序编译,链接成可执行文件。
在linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。
2. gcc编译程序时,编译过程可以被细分为4个阶段:
a.预处理(pre-processing)
b.编译(Compling)
c.汇编(Assembling)
d.链接(Linking)
3.gcc通过后缀来区别输入文件的类型:
.c ----C语言源代码文件
.a ---- 是由目标文件构成的库文件
.C 或 .cc 或 .cxx ---- C++源代码文件
.h ---- 头文件
.i ---- 已经与处理过的C源代码文件
.ii ---- 已经与处理过的C++源代码文件
.o ---- 编译后的目标文件
.s ---- 汇编语言源代码。
.S ---- 经过预编译的汇编语言源代码
4. gcc最基本用法:
gcc [options] [filenames]
gcc option 有100多个,
几个最基本,最常用的参数如下:
-o ---- output_filename
-c ---- 只编译,不链接成可执行文件,即把.c等源代码编译成.o的目标文件,但是不链接。
-g ---- 产生调试工具(GNU的gdb)所需要的符号信息,可以用来对编译出的程序进行调试。
-O ---- 优化编译,链接过程,产生的可执行文件执行效率更高,但是编译,链接速度要慢些
-O2 ---- 比O 更彻底的优化。
-Idirname ---- 用来查找执行头文件目录的参数。
-Ldirname ---- 将dirname所指的目录加入到库文件的目录列表中
-lname ----
-static ---- 静态链接库文件。
-Wall ---- 生成所有警告信息
-w ---- 不生成人和警告
-DMACRO: 相当于程序中的#define MACRO。
5. 链接 和 库 都有动态和静态两种:
静态链接:把程序和库合在一起,每个程序都会有拷贝库。
动态链接:不会把程序和库合在一起,会在运行时,去调用库中的一些函数。
库也有动态库合静态库:
动态库: .so 为后缀。
静态库: .a 为后缀。
补充:
a. $time ./optimize ---- 用来计运行optimize所耗费的时间
b. $touch a.h ---- 用来黏贴a.h文件