| « | November 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | | | |
| 公告 |
|
| Blog信息 |
|
blog名称:FoxWolf 日志总数:127 评论数量:246 留言数量:0 访问次数:858714 建立时间:2006年5月31日 |

| |
|
[必须掌握]glibc gcc简介 文章收藏, 软件技术, 电脑与网络
FoxWolf 发表于 2008/5/13 16:59:34 |
| glibc简介--------------------------------------------------- 由于glibc囊括了几乎所有的UNIX通行的标准,可以想见其内容包罗万有。而就像其他的UNIX系统一样,其内含的文件群分散于系统的树状目录结构中,像一个支架撑起整个操作系统。以 glibc-2.2 为例,这些文件群主要包括:1. 共享库: 这是glibc的主体,分布于/lib与/usr/lib中,包括 libc 标准C函数库 /usr/lib/libc.so libm 数学函数库 /lib/libm.so libcrypt 加密与编码函数库 -/lib/libcrypt.so libdb 数据库 /usr/lib/libdb-4.2.so libpthread -线程库 /usr/lib/libpthread.so libnss 网路服务函数库 /usr/lib/libnss3.so ...等等。这些都是共享库,档名都以.so 做结尾。其中,/lib/ld*.so 是程序与函数库连结的工具。有的用于程序编译时将程序与函数库内的函数连结,在只支持静态链接的系统中,此连结方式就是直接将所需的函数从函数库中抽出来与程序的可执行文件相连,而在支持共享库的系统中,在程序编译时期的链接只是在执行文件中纪录了函数是存在哪个库文件中,等该程序开始执行时,则由另一个负责动态链接的ld*.so 将所需的函数库链接好并执行。一般而言,负责程序编译时期的链接器(静态连接器)为ld.so,而负责程序执行时的动态链接器ld-linux.so (在GNU/Linux系统中)。查看执行文件调用了哪些共享库# ldd a.out共享库管理工具,一般在更新了共享库之后要运行该命令# ldconfig2. 函数库标准头文件与程序开发元件: 这些标准头文件档名都以.h为结尾,全部在/usr/include/底下,其内容为函数库中各函数的声明、巨集定义、数据库的类型 ....等等,这些都是程序开发者不可或缺的部分。除此之外,在/usr/lib/中还有若干.o与.a的文件,这些是程序编译过程中要连结为可执行档时所需的元件,有些则为上述可分享函数库的静态连接版本,而后者可以在某些特殊场合下需要静态连结程序时使用。3. 函数库说明文件: 在一般的UNIX系统下,这些说明文件是放在/usr/man或/usr/share/man底下,统称为 man pages,其底下还分若干章节,其中第二章(man2)讲的是系统调用,而第三章(man3)讲的就是libc标准函数库,这些都是系统开发者重要的参考资料。而在GNU的系统中,除了man pages之外,还有一套称为info的文件资料系统,而且里头的说明往往比 man pages 还要详尽,这在glibc中也不例外。glibc的info文件位于/usr/share/info/libc.info* ,本文中有许多素材就是取自这些文件的内容。4. 字集转换模组与区域化数据库: 这些是与程序国际化与本土化相关的部分,主要可分成四大块:/usr/lib/gconv/内含大量的字集转换模组,大部分是各种字集及编码方式与系统的基底字集之间的 转换。第二块是 /usr/lib/locale,内含以系统基底字集写成的区域化数据库 (locale),像是 LC_CTYPE、LC_TIME ....等等。第三块是/usr/share/locale/,内含可跨平台使用的区域化数据,主要是各应用程序的讯息翻译部分。而最后一块是 /usr/share/i18n/,其内容是各区域化数据库的原始码,以及系统支持的内码对应表....等等。5. 时区资料: 主要分布于/usr/share/zoneinfo底下,内含世界各地时区与格林威治时间的转换资料。6. 其他工具程序与设定档: 工具程序分布在/usr/bin与/sbin底下,包括一些转码与区域化数据库相关的程序如 iconv, locale, localedef等,以及用来显示应用程序与可分享函数库相依关系的 ldd, 还有可分享函数库搜寻路径管理程序 ldconfig ....等。而其相关的设定档则位于/etc底下。glibc的规格--------------------------------------------------- 在GNU/Linux系统中,其C函数库的发展史点出了GNU/Linux演进的几个重要里程碑,由此可以突显出C函数库在系统中的地位与重要性。早期的GNU/Linux系统并不支持可分享函数库,因此所有的应用程序都是以静态连结的方式存于系统中。直到1995-1996年libc5问世以后,系统才开始支持ELF可分享函数库,同时该版的C函数库也实作了其他UNIX上大部分的功能与函数群,可谓GNU/Linux发展上的一大进步。 然而libc5在程序国际化(I18N)与本土化(L10N)方面的支持很差,故那个时候若要开发所谓中文化的程序,就非得自行实现一套标准不可。直到一两年后,GNU/Linux换用了GNU所开发的glibc-2.0做为其C函数库后,其国际化与本土化的支持才开始起步,后来历经glibc-2.1,到了现在的 2.2 版,整个多国语文的开发环境才大至成熟。 采用glibc做为系统的C函数库,是GNU/Linux演进的一个重要里程碑。在GNU的计划中,开发glibc原本是要给他们尚未问世的核心GNU/Hurd用的,由于当时几乎99%的GNU系统工具已开发完成,就独缺核心Hurd,而恰巧Linux核心在 Torvalds的带领下已逐渐成熟稳定,而且可以顺利执行所有的GNU系统工具。故GNU团队便顺应Linux核心的特性,改写了他们的glibc,使其可以适用于Hurd核心与Linux核心。如此,在这两个平台上就有了一致的程序开发环境,使得所有的 GNU程序可以在这两个平台之间顺利移植。 比起过去的libc5,glibc系列(一般又称之为libc6)除了有完整的国际化与本土化支持外,同时还符合许多标准与规格,使得在glibc下开发的程序可以很容易移植到其他UNIX平台去。这些标准包括: ISO C是International Standard for the C programming language的缩写,此标准明定了C语言的语法,标准C函数库应具备那些标准头文件、巨集定义、函数与物件....等等,几乎在任何平台上的C语言(包括非UNIX平台)都支持此标准。 POSIX 是 Portable Operating System Interface for.gcc简介--------------------------------------------------- libc是c语言库,除了内核,基本上所有的程序都会直接或间接地调用到它,gcc也不例外。gcc是编译器,基本上Linux下所有的程序(包括内核)都是gcc编译的,libc当然也是。 gcc和libc是互相依赖的两个软件,它们合作的方式类似Linux系统的 "自举"。先在一个可以运行的带有老libc和gcc的系统上,用老gcc编译出一个新版本的gcc + 老libc,再用这个新gcc编译出一个新gcc + 新libc,再用这套东东编译整个新系统。 gcc-3.4.3.tar.gz 包含了对几种语言的支持 gcc-ada-3.4.3.tar.gz ada编译器 gcc-core-3.4.3.tar.gz C编译器 gcc-g++-3.4.3.tar.gz C++编译器 当我们使用gcc时候,gcc将根据后缀来调用相应的编译器c、c++或ada等。 gcc -x c 调用c编译器 gcc -x c++ 调用c++编译器。 gcc c compiler g++ c++ compiler gcj java compiler gnat ada compiler |
|
|