Glibc是GNU发布的libc库,即c运行库。Glibc是linux系统中最底层的API,几乎其它任何运行库都会依赖于Glibc。
Glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于Glibc囊括了几乎所有的UNIX通行的标准,可以想见其内容包罗万象。而就像其他的UNIX系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。
在GNU/Linux系统中,其C函式库发展史点出了GNU/Linux演进的几个重要里程碑,用Glibc作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。
GNU编译器套件(GNU Compiler Collection),包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。
GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
Binutils是一组二进制工具集。包括addr2line、ar、gprof、nm、objcopy、objdump、ranlib、size、strings和strip。
Libtool是一个通用库支持脚本,将使用动态库的复杂性隐藏在统一、可移植的接口中。使用libtool的标准方法,可以在不同平台上创建并调用动态库。可以认为libtool是gcc的一个抽象,其包装了gcc(或者其他的编译器),用户无需知道细节,只要告诉libtool需要编译哪些库即可,libtool将处理库的依赖等细节。
Libtool只与后缀名为lo、la的libtool文件打交道。(lo是目标文件,la是库文件)。
Libtool主要的一个作用是在编译大型软件的过程中解决了库的依赖问题,将繁重的库依赖关系的维护工作承担下来,从而释放了程序员的人力资源。libtool提供统一的接口,隐藏了不同平台间库的名称的差异等细节,生成一个抽象的后缀名为la高层库libxx.la(其实是个文本文件),并将该库对其它库的依赖关系,都写在该la的文件中。该文件中的dependency_libs记录该库依赖的所有库(其中有些是以.la文件的形式加入的);libdir则指出了库的安装位置;library_names记录了共享库的名字;old_library记录了静态库的名字。
Automake读入Makefile.am,并且生成Makefile.in。
在Makefile.am中定义的一些宏和目标(targets)指挥automake生成更多特定的代码。例如一个“bin_PROGRAMS”宏定义将生成一个需要被编译、连接的目标。
Makefile.am中的宏定义和目标被复制到生成的文件中。这使得用户可以把任何代码添加到生成的Makefile.in文件中。例如,Automake的发布包含了非标准的cvs-dist目标,Automake的维护者用它从他的版本控制系统中创建发布版本。
Autoconf是一个用于生成可以自动地配置软件源代码包以适应多种Unix类系统的shell脚本的工具。由Autoconf生成的配置脚本在运行的时候与Autoconf是无关的,就是说配置脚本的用户并不需要拥有Autoconf。
由Autoconf生成的配置脚本在运行的时候不需要用户的手工干预,通常它们甚至不需要通过给出参数以确定系统的类型。相反,它们对软件包可能需要的各种特征进行独立的测试。(在每个测试之前,它们打印一个单行的消息以说明它们正在进行的检测,以使得用户不会因为等待脚本执行完毕而焦躁。)因此,它们在混合系统或者从各种常见Unix变种定制而成的系统中工作的很好。没有必要维护文件以储存由各个Unix变种、各个发行版本所支持的特征的列表。
对于每个使用了Autoconf的软件包,Autoconf从一个列举了该软件包需要的、或者可以使用的系统特征的列表的模板文件中生成配置脚本。在shell代码识别并响应了一个被列出的系统特征之后,Autoconf允许多个可能使用(或者需要)该特征的软件包共享该特征。如果后来因为某些原因需要调整shell代码,就只要在一个地方进行修改。所有的配置脚本都将被自动地重新生成以使用更新了的代码。
Metaconfig包在目的上与Autoconf很相似,但它生成的脚本需要用户的手工干预,在配置一个大的源代码树的时候这是十分不方便的。不象Metaconfig脚本,如果在编写脚本时小心谨慎,Autoconf可以支持交叉编译(cross-compiling)。
M4是一种宏处理器,它扫描用户输入的文本并将其输出,期间如果遇到宏就将其展开后输出。宏有两种,一种是内建的,另一种是用户定义的,它们能接受任意数量的参数。除了做展开宏的工作之外,m4内建的宏能够加载文件,执行Shell命令,做整数运算,操纵文本,形成递归等等。M4可用作编译器的前端,或者单纯作为宏处理器来用。所有的Unix系统都会提供m4宏处理器,因为它是POSIX标准的一部分。
Pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息。写代码时,经常会调用第三方的库。这些第三方的库的安装路径在每台电脑上可能都会不同。所以如果把这些库的路径写死,那么别人拿到的代码编译时就会遇到各种问题。为了解决这个问题,就有了pkg-config。Pkg-config是个linux下的工具,在windows下虽然也能用,但是用的人很少。
简单的说pkg-config维护了一个保存各个代码库的路径的数据库。当然这个”数据库”非常的简单,其实就是一个特殊的目录,这个目录中有一系列的以“.pc”为后缀的文件。
Gettext是一种国际化与本地化系统,在类Unix系统中编写多语言程序时经常被使用。Gettext的一个常用的实现版本为GNU Gettext,1995年发布。
源代码中所有需要多语言支持的(需要翻译的)字符串都修改为使用gettext函数包装起来。为了方便也可以使用下划线“_”。Gettext函数会使用提供的字符串作为键值去查找当前设置语言对应的翻译版本,如果没有找到则返回原始的字符串。
那么怎么制作各种语言的翻译版本呢?Xgettext程序基于源代码文件,会识别出所有使用gettext或下划线“_”标记的字符串,然后生成 .pot 文件(Portable Object Template)。接下来就是使用msginit程序可以由 .pot 模板文件生成一个 .po 文件(Portable Object)。最后,使用msgfmt程序将 .po 文件编译为二进制的 .mo 文件(Machine Object)。GNU Gettext使用 .gmo 扩展名。接下来就可以使用到程序中了。在Unix中,设置环境变量LC_MESSAGES。Linux中设置环境变量LANGUAGE,如果存在对应的 .mo 文件,程序将使用对应的语言版本。
在Linux应用程序开发中,最常用的调试器是gdb,它可以在程序中设置断点、查看变量值、一步一步跟踪程序的执行过程。利用调试器的这些功能可以方便地找出程序中存在的非语法错误。
因基础版使用的是基于Deb包的管理系统,因此集成了以下debian包管理/生成工具。
Debhelper是一个程序的集合,包含了一系列dh_***工具,可用于Debian规则文件来自动构建二进制Debian软件包相关的常见任务。方案包括安装各种文件到你的包,压缩文件,修改文件的权限,你的包和Debian的菜单系统整合。
GNU make是一种控制可执行文件的生成工具以及程序源程序中的其他目标文件文件夹。它自动决定一个大型程序的哪些部分需要重新创建,并发出命令(重新)创建他们。它可用于组织目标(文件)中的任何任务,每当有输入文件时,根据输入较新的文件相应的输入来自动更新。它不只限于建构计算机程序。事实上,它也是一种通用的依赖解决器。
Devscripts是Debian开发者的工具集合包,比debhelper更进步,有效方便debian包管理者管理软件包。
Dpkg-dev包提供了用来打包、解包、构建、上传debian源代码包的开发工具集(包含了dpkg-buildpackage、dpkg-source等等多个重要的构建包的工具)。