编译C和C++程序.
gcc [options] file-list [-larg]
g++ [options] file-list [-larg]
Linux和Mac OS X 操作系统实用GUN C编译器gcc来预处理,编译,汇编和连接C语言源文件.具有不同前端的相同编译器g++也能处理c++源代码.gcc和g++编译器可以汇编和连接汇编语言源文件,也可以只连接目标文件或者以共享库的形式生成目标文件.
这些编译器从命令行上制定的文件获得输入.除非使用-o选项,否则编译器将得到的可执行程序存储在a.out中.
编译器gcc和g++都是GCC(GNU Compiler Collection)的一部分.GCC包括了C,C++,Objective C,Fortran,Java和Ada语言的前端和库.登陆gcc.gnu.org可获得更多信息.
推荐阅读:
提示:gcc与g++
本节主要针对gcc编译器介绍,但大多数情况下它也适用于g++.
选项
不带任何选项的gcc可以接收c语言源文件,汇编语言源文件,对象文件.适用程序gcc预处理,编译,汇编,连接这些文件,并生成名为a.out的可执行文件.如果gcc用来创建对象文件而不连接它们以生成可执行文件,每个对象文件名源文件的基称上加上扩展名.o组成.如果用gcc来创建可执行文件,那么,它就在连接文件后删除这些对象文件.
下面列出了一些最常见的选项.当某文件扩展名与某个选项关联时,用户可以家丁gcc把扩展名时添加到源文件的基称之后的.
-c
(compile) 不进行编译过程的连接步骤.编译和/或汇编源代码文件,保留扩展名.o的对象代码.
-Dname(=value)
通常#define预处理指令放在头文件或者include文件中.可以在命令中实用这个选项定义一些符号名.例如,-DLinux与在include文件的
#include Linux行等价;-DMACH=i586与#define DMACH i586 等价.
-E
(everything) 对于源文件,值允许编译过程中的预处理,禁止所有其他步骤,将结果写到标准输出.阿斯顿约定,C语言源文件预处理后的文件扩展名为.i;C++语言源文件预处理后的文件扩展名为.ii.
-fpic
使gcc生成与位置无关(position-independent)的源代码,这样的代码适于安装到共享库.
-writable-strings
默认情况下,GNU C编译器将字符串常量放置在受保护的内区(protected memory)中,使得它们不会被修改.一些程序(通常时版本较老的程序)假设用户可以修改字符串常量.该选项改变了gcc的行为,因此可以修改字符串常量.
-g
(gdb)在对象文件中嵌入诊断信息.该信息由符号调试器(如 gdb)使用.虽然后面使用调试器才用到,但包含该选项是一种好习惯.
-Idirectory
搜索标准位置之前,先在directory中查找include文件.多次给出该选项可以在多个目录下查找.
-larg
(首字母时小写字母l) 在/lib和/usr/lib目录中搜索名为linarg.a的库文件.如果找到该文件,gcc就直接在库内搜索需要的函数库.可将arg替换为搜索的库文件名.例如,选项-lm通常链接到标准数学库libm.a.该选项的位置很重要,通常它被放在命令行的末尾,可以多次使用该选项来搜索不同库.库按照它们在命令行上的顺序依次搜索.连接器使用库来解决命令行,库选项之前模块中未定义的符号.可使用-L选项添加其他的库路径来搜索libarg.a.
-Ldirectory
为了搜索用-l选项给出的库,向要搜索的目录列表中添加directory.在搜索库的标准位置之前搜索实用-L添加到列表中的目录.
-o file
(output) 对连接file得到的可执行文件进行命名,而不采用默认的a.out.
-On
(optimize) 尽量优化编译器产生的目标代码.n的值可以是0,1,2,或者3(如果为linux内核编译代码,n就可以是06),默认值为1.较大的n值具有较好的优化结果,但会增加目标代码量和gcc运行时间.实用-O0可以关闭优化功能.当使用gcc的-O选项时,很多相关的选项可以精确地控制优化类.参见gcc的info页以获得详细信息.
-pedantic
GNU C编译器接收的C语言包含一些标准ANSI C语言没有特性.使用该选项强制gcc放弃C语言的扩展,接收标准C语言的特性.
-Q
显示gcc编译的函数名和每次编译的统计信息.
-S
(suppress) 禁止编译过程中对源代码文件的汇编连接步骤.得到的汇编语言文件的扩展名为.s.
-traditional
该选项使得gcc只能接受传统Kemighan和Ritchie C编译语言具有的特性,从而使用gcc可以正确编译实用传统C(标准ANSI C语言之前的C)编译的老程序.
-Wall
该选项使得gcc在源文件中发现可疑的代码时给出警告.很多相关的选项可以用来更精确地控制警告信息.