简介
- 现在的GCC不仅支持C还支持C++、Java等语言。
- Gcc的编译流程
a) 预处理:生成.i/.ii文件;
b) 编译:生成.s/.S文件;
c) 汇编:生成.o文件;
d) 链接:生成可执行文件; - Gcc支持的后缀文件类型:

- Gcc指令的一般格式:
gcc [选项] 要编译的文件 [选项] [目标文件]
编译流程介绍
- 预处理:该阶段将.h文件中的代码包含进程序中;
- 编译:
a) 主要是对预编译后的.i文件编译,生成汇编代码的.s文件。
b) gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。 - 汇编:
a) 将编译后的.s文件转化成二进制文件.o的过程
b) 利用-c选项可以生成二进制.o文件。 - 链接:
a) 主要将成功编译的二进制.o文件进行链接操作,生成可执行文件。
b) Eg: gcc –o test test.o
GCC常用编译选项

- linux系统的头文件默认在:
/usr/include下 - linux系统的库文件默认在:
/usr/lib/下 - linux库文件的命名:必须以lib三个字母开头。
- Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。
默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要使用静态链接库可以在编译时加上-static选项,强制使用静态链接库。
比如在/usr/local/mysql/lib目录下有链接时所需要的库文件libmysqlclient.so和libmysqlclient.a,为了让GCC在链接时只用到静态链接库,可以使用下面的命令:
gcc –L /usr/local/mysql/lib -static –lmysqlclient test.o –o test