转http://blog.163.com/dragon_sjl@126/blog/static/100473339201107101517380/

1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。

Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。
Gcc 编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面我们来 介绍gcc所遵循的部分约定规则。
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
Gcc的执行过程
虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称 预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。
命令gcc首先 调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进 行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件 和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性 工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的 地方。

2、binutils提供了一系列用来创建、管理和维护二进制目标文件的工具程序,如汇编(as)、连接(ld)、静态库归档(ar)、反汇编 (objdump)、elf结构分析工具(readelf)、无效调试信息和符号的工具(strip)等。通常,binutils与gcc是紧密相集成 的,没有binutils的话,gcc是不能正常工作的。

3、glibc是gnu发布的libc库,也即c运行库。glibc是linux系统中最底层的api(应用程序开发接口),几乎其它任何的运行库 都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,主要的如下:
 (1)string,字符串处理
 (2)signal,信号处理
 (3)dlfcn,管理共享库的动态加载
 (4)direct,文件目录操作
 (5)elf,共享库的动态加载器,也即interpreter
 (6)iconv,不同字符集的编码转换
 (7)inet,socket接口的实现
 (8)intl,国际化,也即gettext的实现
 (9)io
 (10)linuxthreads
 (11)locale,本地化
 (12)login,虚拟终端设备的管理,及系统的安全访问
 (13)malloc,动态内存的分配与管理
 (14)nis
 (15)stdlib,其它基本功能

3、glibc和libc都是Linux下的C函数库,那么到底有什么区别呢?
见到Linux下好多的库函数,曾经令我困惑,其实他们是有章可循的。
libc是Linux下的ANSI C的函数库;
glibc是Linux下的GUN C函数库;
ANSI C和GNU C有什么区别呢?
ANSI C是基本的C语言函数库,包含了C语言最基本的库函数。这个库可以根据 头文件划分为 15 个部分,其中包括:字符类型 (<ctype.h>)、错误码 (<errno.h>)、 浮点常数 (<float.h>)、数学常数 (<math.h>)、标准定义 (<stddef.h>)、 标准 I/O (<stdio.h>)、工具函数 (<stdlib.h>)、字符串操作 (<string.h>)、 时间和日期 (<time.h>)、可变参数表 (<stdarg.h>)、信号 (<signal.h>)、 非局部跳转 (<setjmp.h>)、本地信息 (<local.h>)、程序断言 (<assert.h>) 等等。这在其他的C语言的IDE中都是有的。
而GNU C函数库是一种类似于第三方插件的东西,由于Linux是用C语言写的,所以Linux的一些操作是用C语言实现的,所以GNU组织开发了一个C语言的库 用于我们更好的利用C语言开发基于Linux操作系统的程序。其实我们可以把它理解为类似于Qt是一个C++的第三方函数库一样。

libc、glibc与gcc相关推荐

  1. c运行库之 c语言标准库、glibc、 gcc库

    C语言标准库 即ANSI C ,非常轻量,仅包含,数学函数,字符/字符串处理,io 等基本方面,处理目前的版本是c99 glibc库 即GNU c library,也是目前linux 平台的c 标准库 ...

  2. libc glibc glib 的关系

    发现很多人没有搞清楚这两个东西.有个错误的观点:认为Glib是GNU的东东.(因为前面那个"g"),而Glibc是Glib的一个子集.     其实,Glib和Glibc基本上没有 ...

  3. Linux:库函数:libc: glibc

    文章目录 Note 手册的使用 源代码阅读问题 概述 glibc 编译配置 glibc 编译参数调整 版本信息 名词解释 csu nptl sysdeps 组织架构 每个函数都是一个单独的文件 一般结 ...

  4. C 函数库 (libc,glibc,uClibc,newlib)

    glibc glibc和libc都是Linux下的C函数库,libc是Linux下的ANSI C的函数库:glibc是Linux下的GUN C的函数库:GNU C是一种ANSI C的扩展实现.ANSI ...

  5. 理清gcc、libc、glibc、libc++、libstdc++的关系

    转载一篇好文:https://www.jianshu.com/p/a3c983edabd1 当你在Linux下写C/C++代码的时候,是不是会遇到许多编译链接的问题? 时不时报个glibc,gcc,g ...

  6. libc、glibc和glib的关系

    转自: http://my.oschina.net/moooofly/blog/126260 http://nieyong.github.io/wiki_ny/glibc,%20eglibc%E5%9 ...

  7. C函数库(libc、glibc、uClibc、newlib)

    libc.glibc.uClibc.newlib glibc和libc uClibc Newlib glibc和libc glibc和libc都是Linux下的C函数库,libc是Linux下的ANS ...

  8. centos 7使用gcc编译c语言,CentOS 7编译安装gcc 4.9.4

    1. 为什么要升级到gcc4.9.x呢? 因为最近在做的一个项目中要用C++11新特性,而在 g++ 4.9 之前,regex 库并不支持 ECMAScript 的正则语法,换句话说,在 g++4.9 ...

  9. linux权限整改,Linux底层函数库glibc漏洞核查整改指引

    一. 漏洞概要 近日,Linux底层函数glibc 的 DNS 客户端解析器被发现存在基于栈的缓冲区溢出漏洞.攻击者可借助特制的域名. DNS 服务器或中间人攻击利用该漏洞执行任意代码,甚至控制整个系 ...

最新文章

  1. Maven项目加载JAR包
  2. Oracle中的NULL(二、NULL详解)
  3. 网页中PNG透明背景图片的完美应用
  4. linux ipconfig和route 命令
  5. python中构造函数可以重载吗_python中的函数重载了吗?
  6. pytho---之easydict使用
  7. Docker 快速学习(一)
  8. net framework 4.0安装未成功,原因是?
  9. 多看系统kindle最新版_更新到最新版微信后,我要吹爆这一功能!
  10. Base64 | Base32 | Base16编码和解码
  11. android wifi热点设置用户数,android 如何获取连接wifi热点的设备数量
  12. Delphi xe7组件和控件的安装方法
  13. php strpos 区分大小写么?,PHP strpos() 函数
  14. 读书:《人人都是产品经理》-苏杰
  15. find7 android 5,5.5英寸四核芯 OPPO Find 7轻装版评测
  16. unity 调用打印机打印图片问题
  17. FISCO BCOS群组特性
  18. 知云文献翻译打不开_推荐一款文献翻译软件,免费又高效的那种
  19. 去哪儿网支付系统架构演进(上)
  20. Unity-可编辑的星星特效

热门文章

  1. 新神奇传说补丁_如何在神奇宝贝Go中捕捉传说中的神奇宝贝
  2. 小鼠肺内皮细胞 (MPEC)
  3. Vue学习25_Vue的异步操作Promise
  4. 导出mysql表数据到文件
  5. 计算机的英语作文模板,高中英语作文模板 第243期:My Computer 我的电脑
  6. linux 字符串数组初始化,Linux命令行 – 数组
  7. c# forbidden.html,nginx静态资源文件无法访问,403 forbidden错误
  8. 201709-2 公共钥匙盒 ccf
  9. Java数组数据类型
  10. trs java_TRS Java应用开发接口概述