编程常识

gcc

 GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。

binutils

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

glibc

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操作系统的程序。