GCC详解-总览

1、GCC是什么

早期 GCC 的全拼为 GNU C Compiler,即 GUN 计划诞生的 C 语言编译器,显然最初 GCC 的定位确实只用于编译 C 语言。


但经过这些年不断的迭代,GCC 的功能得到了很大的扩展,它不仅可以用来编译 C 语言程序,还可以处理 C++、Go、Objective -C 等多种编译语言编写的程序。


与此同时,由于之前的 GNU C Compiler 已经无法完美诠释 GCC 的含义,所以其英文全称被重新定义为 GNU Compiler Collection,即 GNU 编译器套件。

其官方网站为:https://gcc.gnu.org/

2、GCC的组成

GCC由如下三部分组成:

Gcc-Core:GCC编译器,完成预处理和编译过程
Binutils:包括了链接器ld,汇编器as,目标文件格式查看器readelf等一系列小工具
glibc:C语言标准库

2.1 GCC-Core

名称介绍
c++

gcc 的一个版木,默认语言设置为 C++,而且在连接的时候自动包含标准 C++ 库。

这和 g++ 一样

ccl实际的C编译程序
cclplus实际的 C++ 编泽程序
collect2在不使用 GNU 连接程序的系统上,有必要运行 collect2 来产生特定的全局初始化代码(例如 C++ 的构造函数和析构函数)
configureGCC 源代码树根目录中的一个脚木。用于设置配置值和创建GCC 编译程序必需的 make 程序的描述文件
crt0.o这个初始化和结束代码是为每个系统定制的,而且也被编译进该文件,该文件然后会被连接到每个可执行文件中来执行必要的启动和终止程序
cygwin1.dllWindows 的共享库提供的 API,模拟 UNIX 系统调用
f77该驱动程序可用于编译 Fortran
f771实际的 Fortran 编译程序
g++gcc 的一个版木,默认语言设置为 C++,而且在连接的时候自动包含标准 C++ 库。这和 c++ 一样
gcc该驱动程序等同于执行编译程序和连接程序以产生需要的输出
gcj该驱动程序用于编译 Java
gnat1实际的 Ada 编译程序
gnatbind一种工具,用于执行 Ada 语言绑定
gnatlink一种工具,用于执行 Ada 语言连接
jc1实际的 Java 编译程序
libgcc该库包含的例程被作为编泽程序的一部分,是因为它们可被连接到实际的可执行程序中。 它们是特殊的例程,连接到可执行程序,来执行基木的任务,例如浮点运算。这些库中的例程通常都是平台相关的
libgcj运行时库包含所有的核心 Java 类
libobjc对所有 Objective-C 程序都必须的运行时库
libstdc++运行时库,包括定义为标准语言一部分的所有的 C++ 类和函数

2.2 Binutils

名称介绍
addr2line给出一个可执行文件的内部地址,addr2line 使用文件中的调试信息将地址翻泽成源代码文 件名和行号。
ar这是一个程序,可通过从文档中增加、删除和析取文件来维护库文件。通常使用该工具是为了创建和管理连接程序使用的目标库文档。
asGNU 汇编器。实际上它是一族汇编器,因为它可以被编泽或能够在各种不同平台上工作。 
autoconf产生的 shell 脚木自动配置源代码包去编泽某个特定版木的 UNIX
c++filt程序接受被 C++ 编泽程序转换过的名字(不是被重载的),而且将该名字翻泽成初始形式。 
f2c是 Fortran 到C的翻译程序。不是 GCC 的一部分
gcovgprof 使用的配置工具,用来确定程序运行的时候哪一部分耗时最大
gdbGNU 调试器,可用于检查程序运行时的值和行为
GNATSGNU 的调试跟踪系统(GNU Bug Tracking System)。一个跟踪 GCC 和其他 GNU 软件问题的在线系统
gprof该程序会监督编泽程序的执行过程,并报告程序中各个函数的运行时间,可以根据所提供 的配置文件来优化程序。
ldGNU 连接程序。该程序将目标文件的集合组合成可执行程序。
libtool一个基本库,支持 make 程序的描述文件使用的简化共享库用法的脚木
make一个工具程序,它会读 makefile 脚木来确定程序中的哪个部分需要编泽和连接,然后发布 必要的命令。它读出的脚木(叫做 makefile 或 Makefile)定义了文件关系和依赖关系
nlmconv将可重定位的目标文件转换成 NetWare 可加载模块(NetWare Loadable Module, NLM)。
nm列出目标文件中定义的符号。
objcopy将目标文件从一种二进制格式复制和翻译到另外一种。
objdump显示一个或多个目标文件中保存的多种不同信息。
ranlib创建和添加到 ar 文档的索引。该索引被 Id 使用来定位库中的模块。
ratforRatfor 预处理程序可由 GCC 激活,但不是标准 GCC 发布版的一部分
readelf从 ELF 格式的目标文件显示信息。
size列出目标文件中每个部分的名字和尺寸。
strings浏览所有类型的文件,析取出用于显示的字符串。
strip从目标文件或文档库中去掉符号表,以及其他调试所需的信息。
vcgRatfor 浏览器从文木文件中读取信息,并以图表形式显示它们。而 vcg 工具并不是 GCC 发布中的一部分,但 -dv 选项可被用来产生 vcg 可以理解的优化数据的格式
windresWindow 资源文件编泽程序。

2.3 glibc

我们之前有详细介绍过了,可以参考另外两个博文:

https://blog.csdn.net/sjwangjinbao/article/details/118657631

https://blog.csdn.net/sjwangjinbao/article/details/118684189

3、参考

http://c.biancheng.net/view/679.html

https://zhuanlan.zhihu.com/p/351841622

=========================================================================

注意:本文为本人原创,版权所属为个人所有,欢迎转载,但是转载请注明出处。

=========================================================================

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值