• GCC编译选项含义解析


    GCC 编译

    GCC的编译流程分为四个步骤,分别为:

    • 预处理(Pre-Processing)
      • 可以通过gcc -E hello.cc -o hello.i查看中间结果
    • 编译(Compiling)
    • 汇编(Assembling)
    • 链接(Linking)

    gcc 命令只能编译C++源文件,而不能自动和C++程序使用的库链接。因此,通常使用g++命令来完成C++程序的编译和链接,该程序会自动调用gcc实现编译

    1. 总体选项

    1. -c:只激活预处理、编译和汇编过程,但不做link,只生成目标文件
    2. -o:指定输出文件,未指定时,默认为a.out
    3. -S:只激活预处理和编译,生成.s的汇编文件
    4. -E:只激活预处理,需要重定向到一个文件里,gcc -E hello.c > pre_hello.i

    2. 调试选项

    1. -g:以操作系统的本地格式(stabs, COFF, XCOFF等)产生调试信息,以便GDB使用
    2. -glevel:调试信息生成级别,默认为2,如-g3
      • level=1,输出少量调试信息,没有局部变量和行号信息
      • level=3,输出较多调试信息

    3. 预处理器选项

    1. -Dmacro:相当于C语言中的#define macro
    2. -Dmaroc=defn:定义宏macro的内容为defn,相当于C语言中#define marco=defn
    3. -Umacro:取消宏macro,-U 选项在所有-D 选项之后使用
    4. -include file:当某个文件需要另一个文件时,可以用它来设定,功能类似#include <filename>,如gcc hello.c -include /root/ss.h

    4. 链接器选项

    1. -static:将禁止使用动态库
    2. -shared:指定生成一个共享目标文件,常搭配-fPIC使用
    3. -Wl,option:把选项option传递给链接器;如果option包含逗号,会分隔为多个选项
    4. -symbolic:建立共享目标文件时候,把引用绑定到全局符号上

    5. 目录选项

    1. -l{library]}:指定编译的时候使用的库,如gcc -lcurses hello.c,链接时使用
    2. -L{dir}:指定编译时,搜索库的路径。如果不指定,编译器将只在标准库的目录搜索
    3. -I{dir}:增加编译时,搜索头文件的路径。 当使用#include "file"时,gcc/g++会先在当前目录查找你指定的文件,若没有,则去缺省的头文件目录找。若使用-I指定了目录,则会优先在指定的目录找,再按照常规顺序寻找。对于#include <file>gcc/g++会到-I指定目录找,若没有,则去缺省的头文件目录找。
    4. -I-:取消前一个-I{dir}的参数功能
    5. -nostdinc:告诉编译器不在系统缺省的头文件目录里找头文件,一般与-I联合使用
    6. -nostdinc++:告诉编译器不在g++指定的标准路径中搜索,但仍在其他路径搜索,此选项在创建libg++库使用

    6. 警告选项

    1. -w:禁止所有警告信息(不建议)
    2. -Wall:开启大部分警告提示(建议使用)
    3. -Werror:视警告为错误,出现任何警告立即中断编译

    7. 优化选项

    1. -O0:不优化
    2. -O1:优化,对于大函数,优化编译占用稍微多的时间和相当大的内存
    3. -O2:更多优化,除了空间和速度交换的优化选项,执行几乎所有的优化
      • 如:进行循环展开和函数内联
      • 会增加编译时间,但提高了生成代码的执行效率
    4. -ffloat-store:不要在寄存器中存放浮点变量

    8. 代码生成选项

    1. -fpic:如果支持这种目标机,编译器就生成位置无关目标码,适用与共享库
    2. -fPIC:如果支持这种目标机,编译器就生成位置无关目标码,即使分支需要大范围转移

    9. 语言选项

    1. -std=c++11:支持c++11
    2. -ansi:支持符合ANSI标准的C程序
    3. -fno-asm:用于诗词安anis选项中功能的一部分,禁止将asminlinetypeof用作关键字
    4. -x language filename:设定此文件使用的语言,无视后缀名,且对此参数后多个文件有效,如gcc -x c hello.pig -x none,指定none来关闭上一个选项

    10. 机器相关选项

    1. -mhard-float:输出包括浮点指令的目标码,缺省选项

    2. -msoft-float:警告:没有为SPARC提供GNU浮点库.一般说来使用该机型本地C编译器的相应部件

      • 不能直接用于交叉编译.你必须自己安排,提供用于交叉编译的库函数.
      • -msoft-float 改变了输出文件中的调用约定;因此只有用这个选项编译整个程序才有意义
  • 相关阅读:
    c#基础加强版之方法控制流复习-3控制台打印密码
    c#基础加强版之方法控制流复习-2变量是否初始化的问题
    c#基础加强版之方法控制流复习-1关于方法的讲解
    小菜学try语句,又被trouble给catch住了
    JQuery--CSS操作
    JavaScript--DOM操作
    JavaScript--选择器
    JQuery--jQuery对象与DOM对象
    JavaScript--DOM编程
    JDBC--调用函数&存错过程
  • 原文地址:https://www.cnblogs.com/CocoML/p/14643389.html
Copyright © 2020-2023  润新知