简介
现在的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