gcc:
- 描述:
当您调用GCC时,它通常执行预处理、编译、汇编和链接。"overall option"选项能够让你停止在这个过程的某一个中间阶段。例如,-c选项表示不运行链接器。然后只输出通过汇编程序汇编后的目标文件。其他选项用在某一个处理阶段。还有一些选项用于控制预处理器和编译器本身。由于您很少需要使用它们中的任何一个,所以这里没有记录其中的大多数。然而,其他选项控制汇编和链接器;大多数选项没有记录在这里,因为你很少需要使用其中的任何一个选项。在GCC中使用的大多数命令行选项对C程序都很有用;当一个选项只对另一种语言有用(通常是c++)时,解释就会明确地说明这一点。如果特定选项的描述没有提到源语言,则可以将该选项用于所有受支持的语言。运行GCC的通常方法是运行称为GCC的可执行文件,或者在交叉编译时运行 machine-gcc,或者运行特定gcc的版本machine-gcc -version。编译c++程序时,应该将GCC调用为g++。
更多信息参考man手册
- 常用命令格式:
预处理、编译、汇编和链接:
gcc [-c|-S|-E] 输入文件 [-o] [输出文件]
创建共享文件:
gcc -shared -fPIC 目标文件… -o lib库文件.so
gcc选项:
–c:编译、汇编源文件,但不链接。链接阶段还没有完成。最终的每一个输出是以源文件的文件名命名的形式出现的。
默认情况下,源文件的目标文件名由.o代替后缀.c、.i、.s等组成。
无法识别的输入文件和不需要编译或汇编的文件将被忽略。
–S:编译完成后停止;不汇编。输出是以源文件的文件名命名且能被汇编程序识别的对象文件。
默认情况下,源文件的汇编程序文件名由.c、.i等后缀替换为.s组成。
不需要编译的输入文件将被忽略。
–E:预处理阶段结束后停止;不运行编译程序。输出的形式是预处理的源代码内容,它被发送到标准输出。
不需要预处理的输入文件将被忽略。
–g:以操作系统的本地格式(stabs, COFF, XCOFF,或DWARF).产生调试信息,也就是让编译器在编译的时候产生调试信息。GDB能够使用这些调试信息. 在大多数使用stabs格式的系统上, -g选项只支持GDB使用这些额外的调试信息;这些信息使GDB 调试效果更好,但是有可能导致其他调试器崩溃,或拒绝读入程序。如果你确定要控制是否生成额外的信息, 使用-gstabs+, -gstabs, -gxcoff+, -gxcoff, -gdwarf+,或-gdwarf。
–w:禁止所有警告消息。
–Werror:使所有的警告变成错误。
–Werror=:将指定的警告转换为错误。 附加警告的说明符; 例如-Werror =开关将由-Wswitch控制的警告转换为错误。 此开关采用否定形式,用于否定-针对特定警告的错误; 例如-Wno-error =开关使得-wswitch警告不是错误,即使在-Werror有效时也是如此。
–o outfile: 将输出放在文件中。这适用于正在生成的任何类型的输出(.i/.s/.o/可执行文件),无论是可执行文件、目标文件、汇编程序文件或预处理的C代码。
–v:打印(在标准错误输出上)运行编译阶段时执行的命令。同时打印编译器驱动程序的版本号,预处理器和编译器的版本号。
–Ldir:将dir添加到链接器搜索库的目录中。除非另有指示,否则gcc在标准库的目录下使用共享库而不是静态库。
–I
dir:在头文件的搜索路径列表中添加dir目录。
–l
库名:针对–Ldir指定的库名链接。默认寻找共享库,如果没有该名称对应的共享库,则寻找静态库。如果两者都没有找到,就会发出一个错误。
注意,库的文件名称以lib开头,以.a/.so结尾。但是,库名不需写lib和a。
使用-L添加库的搜索路径。
–Wwarn:设置编译器的警告级别。Wall:打开所有类型语法警告。Wcomment:打开注释警告,当“/*”出现在“/*..*/
"注释中,或”\“出现在"//..."
注释结尾处。
–Olevel:代码优化级别。-O/-O1:优化。对于大型函数,优化编译需要更多的时间和内存。使用-O,编译器试图减少代码大小和执行时间,而不执行任何需要大量编译时间的优化。-O2:进一步优化。GCC执行几乎所有受支持的优化,这些优化不涉及空间速度的权衡。与-O相比,此选项增加了编译时间和生成代码的性能。-O3;更多优化。o3使用-O2指定的所有优化,并加上自己的优化标志。-O0:减少编译时间,使调试产生预期的结果。这是默认值。-Os:优化大小。Os支持所有通常不会增加代码大小的-O2优化。-Og:优化调试体验。-Og支持不影响调试的优化。它应该是标准编辑-编译-调试周期的最优选择,在保持快速编译的同时提供合理的优化水平和良好的调试体验。
如果您使用多个-O选项,无论是否使用level级别号,最后一个选项都是有效的。
–Dmacro:预定义在源代码中出现的macro宏
–Umacro:取消macro定义的宏
–fpic:编译器生成位置无关目标码(PIC,position-independent code),用于动态链接库,即Linux下的.so文件。通过全局偏移表(GOT,Global Offset Table)访问所有常量地址。程序启动时通过动态加载程序解析GOT条目。如果链接的so文件的GOT大小超过计算机特定的最大大小,则会从链接器收到错误消息,指示-fpic不起作用。这种情况下,请使用-fPIC重新编译。
–fPIC:同-fpic功能一致,生成位置无关的目标码,用于生成动态链接库,建议使用该选项,而非-fpic。
–shared:默认选项,生成一个共享目标(也就是生成动态链接库)然后该目标可以与其他目标链接,形成一个可执行文件。并非所有系统都支持此选项。
–static :该选项将禁止使用动态库,使链接器执行静态链接。 与-shared相比,其编译出来的文件一般都很大,不需动态链接库就可以运行。
–Wl,option:将option作为一个选项传递给链接器。如果选项包含逗号,则在逗号处将其分成多个选项。可以使用此语法将参数传递给该选项。
option: -Bstatic、-Bdynamic
option:这些选项被传递给链接器。它们的定义是为了与Diab兼容。
Bstatic选项告诉链接器,对后面-l选项使用静态链接;
Bdynamic告诉链接器,对后面-l选项使用动态链接。
–std=standard:指定c/c++的标准 ,比如C89(ANSI C)、C90、C95、C99(ISO C)等
更多信息参考man手册