GCC编译器

GCC简介

GCC全称GNU Complier Collection, GNU编译器集合,发展到现在,其不仅能编译C语言程序,还是C++,GO,Objective-C等多种语言的前端。

程序由源代码变成可执行程序需经过4个步骤:预处理、编译、汇编和链接。

预处理过程调用预处理器,对预处理指令(#include等)进行处理,生成预处理后的文件(.i 文件);编译则将每一个预处理后的源代码文件视为一个编译单元,对其进行编译,生成汇编文件(.s 或 .S 文件),汇编文件中都是机器(CPU平台)支持的汇编指令构成的代码;汇编则是调用汇编器,将汇编文件汇编为中间目标文件(.o 文件);链接则是使用链接器,将目标文件与标准库等链接起来,生成可执行文件。

GCC命令选项

gcc编译器集提供很多选项来控制gcc的工作,其命令的格式也很自由,作者比较喜欢使用下面的格式来调用gcc:

gcc [options] 源文件列表 [-o file]

输出控制选项


  • -c: 编译或汇编文件,但不链接。最终生成目标文件(.o 文件)。
  • -S: 只编译,不汇编。最终生成汇编文件(.s 文件)。
  • -E: 只预处理,不编译。最终生成预处理后的文件(.i 文件)。预处 理。后的文件会被直接输出到标准输出上。
  • -o file: 指定 -c -S -E 选项输出的文件的名称。使用 -o 命令指定文件名后,GCC会将 -c -S -E 选项的输出放到 file 指定的文件中。
    如果没使用 -o file 选项,则生成的可执行文件名默认为 a.out;目标文件名为 sourceName.o;汇编文件名为 sourceName.s;预编译后的头文件名为sourceName.suffix.gch;(suffix: 后缀名)
  • -v: 在标准错误输出(通常被指定为屏幕)上打印编译期间的所有过程信息,并打印编译器、编译器驱动程序、预处理器的版本号。

C语言标准版本控制


  • -std=value: 指定GCC使用什么版本的C/C++语言标准去编译源文件,仅在编译C语言,C++代码时可用。
    value可用的值有(注意大小写):
    c90: 使用ISO C90标准编译程序。
    c11: 使用ISO C11标准,即2011年版本的ISO C标准编译程序。
    c18: 使用ISO C18标准,即2018年版本的ISO C标准编译程序。
    c++11、c++20等。

警告选项


  • -w: 禁止所有警告。
  • -Wall: 尽可能多地输出警告。
  • -Wextra、-W: 输出 -Wall 没有开启的警告选项。
  • -Werror: 将所有警告视为错误。使用该选项当有警告产生时GCC会停止编译。
    通常同时使用 -Wall -Wextra选项以产生尽可能多的警告信息。

调试选项


正常情况下GCC编译器是不会产生调试信息的,如果要让GCC产生额外的调试信息供 调试器(debugger) 使用,需要使用调试选项,一般情况下,使用 -g 选项足以产生足够的调试信息。

  • -g: 使GCC添加额外的调试信息到可执行文件。
  • -Og: 在使用 -g 不起作用的情况下使用。

编译器优化控制选项


编译过程的优化会使代码变得更高效,占用空间更小,但通常情况下会延长编译时间,降低调试时的体验。
未使用优化选项时,编译器将尽量降低编译的成本,并使debug工作正常。

  • -O、-O1: 最低等级优化。启用优化后编译程序所需时间会变长,占用的内存也会变大,但编译后的可执行程序的大小和执行时间都会得到优化。
  • -O2: 高一级的优化。相较于 -O 选项,会花费更多时间。
  • -O3: 更高等级的优化。
  • -O0: 默认值。减少编译时间,产生正常调试所需的信息。
  • -Os: 优化代码大小。该选项基本上会开启O2等级的所有优化(会增加代码大小的除外)。
  • -Ofast: 比 O3 更高等级的优化,此时会忽略严格的标准合规性。
  • -Og: 优化调试过程,增加额外调试信息。该选型会禁用掉很多优化选项。
    使用多个优化控制选项时,仅最后一个起作用。

链接选项


链接选项仅在讲目标文件链接成可执行文件时起作用。

  • -fuse-ld=value: 切换链接器。
    value 的可选值有:
    bfd: bfd链接器。
    gdd: gdd链接器。
    lld: LLVM lld 链接器。
  • -l: 手动添加链接库。-l 后紧跟要链接的库的基本名。
  • -L: 指定链接库的搜索路径。

以上内容均是根据GNU GCC 8.5.0版本的用户手册翻译得到,原文档的链接如下,想看英文版,查找自己所需内容的可以看看:
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc.pdf
<GNU GCC 8.5.0版用户手册-pdf>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值