glibc

glibc

計算機術語
glibc是GNU發布的libc庫,即c運行庫。glibc是linux系統中最底層的api,幾乎其它任何運行庫都會依賴于glibc。glibc除了封裝linux操作系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現。由于glibc囊括了幾乎所有的UNIX通行的标準,可以想見其内容包羅萬象。而就像其他的UNIX系統一樣,其内含的檔案群分散于系統的樹狀目錄結構中,像一個支架一般撐起整個操作系統。在GNU/Linux系統中,其C函式庫發展史點出了GNU/Linux演進的幾個重要裡程碑,用glibc作為系統的C函式庫,是GNU/Linux演進的一個重要裡程碑。[1]
    中文名: 外文名:glibc 所屬品牌: 産品類型: 字符串處理:string 信号處理:signal 文件目錄操作:direct

功能實現

主要的如下:

(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,其它基本功能

Glibc的内容

由于glibc囊括了幾乎所有的UNIX通行的标準,可以想見其内容包羅萬有。而就像其他的UNIX系統一樣,其内含的檔案群分散于系統的樹狀目錄結構中,像一個支架一般撐起整個作業系統。以glibc-2.2為例,這些檔案群主要包括:

1.分享函式庫群:

這是glibc的主體,分布/lib與/usr/lib中,包括libc标準C函式庫、libm數學函式庫、libcrypt加密與編碼函式庫、libdb資料庫函式庫、libpthread行程多執行緒函式庫、libnss網路服務函式庫....等等。這些都是可分享函式庫,檔名都以.so做結尾。其中,/lib/ld*.so是程式與函式庫連結的工具。有的用于程式編譯時将程式與函式庫内的函式物件連結,在隻支援靜态連結的系統中,此連結方式就是直接将所需的物件自函式庫中抽出?砼c程式的可執行檔相連,而在支援可分享函式庫的系統中,在程式編譯時期的連結隻是在執行檔中紀錄了那些函式物件是存在那個函式庫檔案中,等該程式開始執行時,則由另一個負責動态連結的ld*.so将所需的函式庫連結好?K執行。

一般而言,負責程式編譯時期的連結器檔名為ld.so,而負責程式執行時的動态連結器檔名為ld-.so或ld-linux.so(在GNU/Linux系統中)。

函式庫标頭檔與程式開發元件:

這些标頭檔檔名都以.h為結尾,全部在/usr/include/底下,其内容為函式庫中各函式的宣告、巨集定義、資料物件的型别....等等,這些都是程式開發者不可或缺的部分。

除此之外,在/usr/lib/中還有若幹.o與.a的檔案,這些是程式編譯過程中要連結為可執行檔時所需的元件,有些則為上述可分享函式庫的靜态連接版本,而後者可以在某些特殊場合下需要靜态連結程式時使用。

函式庫說明文件:

在一般的UNIX系統下,這些說明文件是放在/usr/man或/usr/share/man底下,統稱為manpages,其底下還分若幹章節,其中第二章(man2)講的是系統呼叫,而第三章(man3)講的就是libc标準函式庫,這些都是系統開發者重要的參考資料。

而在GNU的系統中,除了manpages之外,還有一套稱為info的文件資料系統,而且裡頭的說明往往比manpages還要詳盡,這在glibc中也不例外。glibc的info文件位于/usr/share/info/libc.info*,本文中有許多素材就是取自這些文件的内容。

字集轉換模組與區域化資料庫:

這些是與程式國際化與本土化相關的部分,主要可分成四大塊:/usr/lib/gconv/内含大量的字集轉換模組,大部分是各種字集及編碼方式與系統的基底字集之間的轉換。第二塊是/usr/lib/locale,内含以系統基底字集寫成的區域化資料庫(locale),像是LC_CTYPE、LC_TIME....等等。第三塊是/usr/share/locale/,内含可跨平台使用的區域化資料,主要是各應用程式的信息翻譯部分。而最後一塊是/usr/share/i18n/,其内容是各區域化資料庫的原始碼,以及系統支援的内碼對應表....等等。

時區資料庫:

主要分别在/usr/share/zoneinfo底下,内含世界各地時區與格林威治時間的轉換資料。

其他工具程式與設定檔:

工具程式分?言/usr/bin與/sbin底下,包括一些轉碼與區域化資料庫相關的程式如iconv,locale,localedef等,以及用?盹@示應用程式與可分享函式庫相依關系的ldd,還有可分享函式庫搜尋路?焦芾沓淌ldconfig....等。而其相關的設定檔則位于/etc底下。

disaos

03-11-03,10:42

GLIBC的規格

在GNU/Linux系統中,其C函式庫的發展史點出了GNU/Linux演進的幾個重要裡程碑,由此可以突顯出C函式庫在系統中的地位與重要性。早期的GNU/Linux系統?K不支援可分享函式庫,因此所有的應用程式都是以靜态連結的方式存于系統中。直到1995-1996年libc5問世以後,系統才開始支援ELF可分享函式庫,同時該版的C函式庫也?作了其他UNIX上大部分的功能與函式群,可謂GNU/Linux發展上的一大進步。

然而libc5在程式國際化(I18N)與本土化(L10N)方面的支援很差,故那個時候若要開發所謂中文化的程式,就非得自行?作一套标準不可。直到一兩年後,GNU/Linux換用了GNU所開發的glibc-2.0做為其C函式庫後,其國際化與本土化的支援才開始起步,後?須v經glibc-2.1,到了現在的2.2版,整個多國語文的開發環境才大至成熟。

用glibc做為系統的C函式庫,是GNU/Linux演進的一個重要裡程碑。在GNU的計劃中,開發glibc原本是要給他們尚未問世的核心GNU/HURD用的,由于當時幾乎99%的GNU系統工具已開發完成,就獨缺核心Hurd,而恰巧Linux核心在Torvalds的帶領下已逐?u成熟穩定,而且可以順利執行所有的GNU系統工具。故GNU團隊便順應Linux核心的特性,改寫了他們的glibc,使其可以适用于Hurd核心與Linux核心。如此,在這兩個平台上就有了一緻的程式開發環境,使得所有的GNU程式可以在這兩個平台之間順利移植。

比起過去的libc5,glibc系列(一般又稱之為libc6)除了有完整的國際化與本土化支援外,同時還符合許多标準與規格,使得在glibc下開發的程式可以很容易移植到其他UNIX平台去。這些标準包括:

ISOC:

ISOC是InternationalStandardfortheCprogramminglanguage的縮寫,此标準明定了C語言的語法,标準C函式庫應具備那些标頭檔、巨集定義、函式與物件....等等,幾乎在任何平台上的C語言(包括非UNIX平台)都支援此标準。

POSIX:

POSIX是PortableOperatingSystemInterfaceforComputerEnvironments的縮寫,它是ISOC的延伸,明定了一個可移植的作業系統所應具備種種條件,其範圍不隻有系統函式庫而已,還同時包括一些标準的工具程式、系統核心應有的特色與?作、以及在C函式庫中某些與作業系統相關的低階控制支援(如系統呼叫窗口)等等。由于glibc是完全按照POSIX的标準制作的,同時搭配了符合POSIX标準的Linux核心,故在此環境下開發的程式可以做到完全符合POSIX的規格。

BerkeleyUnix:

BerkeleyUnix泛稱柏克萊大學所開發的UNIX系列作業系統,包括4.2BSD、4.3BSD、4.4BSD以及早期的SunOS。這些系統的C函式庫中有許多傑出的設計,但卻沒有在上述兩個标準中,包括select()函式、sockets....等等,這些在glibc中都有支援。

SVID:

SVID是SystemVInterfaceDescription的縮寫,它是一份描述AT&TUNIXSystemV系統規格的文件,它是POSIX标準的延伸。Glibc?作了大部分的SVID規格要求,其中較重要的包括了行程之間的通?标準以及分享式記憶體(SharedMemory),至于其他的部分則較不常使用。?作SVID主要的目的是希望可以做到與UNIXSystemV的相容與程式的可移植性。

XPG:

XPG是X/OpenPortabilityGuide的縮寫,是由X/OpenCompany,Ltd.所發表,同時X/Open還擁有UNIX商标的版權。而這份規格不但是POSIX标準的擴充,同時也明定了一個UNIX作業系統所應符合的要求。其中包括了iconv()字集轉換介面,以及部分BSD與SVID的特色。

除了上述的規格外,glibc還内含了GNU特有的特色,稱之為GNUExtension。這些特色在某些情況下可以方便程式的撰寫與維護,但就不見得可以移植到其他UNIX平台上,故在可移植性的考量下使用時必須留意。

安裝下列程序:catchsegv,gencat,getconf,getent,glibcbug,iconv,iconvconfig,ldconfig,ldd,lddlibc4,locale,localedef,mtrace,nscd,nscd_nischeck,pcprofiledump,pt_chown,rpcgen,rpcinfo,sln,sprof,tzselect,xtrace,zdump和zic

安裝下列庫文件:ld.so,libBrokenLocale.[a,so],libSegFault.so,libanl.[a,so],libbsd-compat.a,libc.[a,so],libc_nonshared.a,libcrypt.[a,so],libdl.[a,so],libg.a,libieee.a,libm.[a,so],libmcheck.a,libmemusage.so,libnsl.a,libnss_compat.so,libnss_dns.so,libnss_files.so,libnss_hesiod.so,libnss_nis.so,libnss_nisplus.so,libpcprofile.so,libpthread.[a,so],libresolv.[a,so],librpcsvc.a,librt.[a,so],libthread_db.so和libutil.[a,so]

簡短說明

catchsegv當程序發生segmentationfault的時候,用來建立一個堆棧跟蹤。

gencat建立消息列表。

getconf針對文件系統的指定變量顯示其系統設置值。

getent從系統管理數據庫獲取一個條目。

glibcbug建立glibc的bug報告并且email到bug報告的郵件地址。

iconv轉化字符集。

iconvconfig建立快速讀取的iconv模塊所使用的設置文件。

ldconfig設置動态鍊接庫的實時綁定。

ldd列出每個程序或者命令需要的共享庫。

lddlibc4輔助ldd操作目标文件。

locale是一個Perl程序,可以告訴編譯器打開或關閉内建的locale支持。

localedef編譯locale标準。

mtrace...

nscd提供對常用名稱設備調用的緩存的守護進程。

nscd_nischeck檢查在進行NIS+偵查時是否需要安全模式。

pcprofiledump打印PCprofiling産生的信息。

pt_chown是一個輔助程序,幫助grantpt設置子虛拟終端的屬主,用戶組和讀寫權限。

rpcgen産生實現RPC協議的C代碼。

rpcinfo對RPC服務器産生一個RPC呼叫。

sln用來創建符号鍊接,由于它本身是靜态連接的,在動态連接不起作用的時候,sln仍然可以建立符号鍊接。

sprof讀取并顯示共享目标的特征描述數據。

tzselect對用戶提出關于當前位置的問題,并輸出時區信息到标準輸出。

xtrace通過打印當前執行的函數跟蹤程序執行情況。

zdump顯示時區。

zic時區編譯器。

ld.so幫助動态鍊接庫的執行。

libBrokenLocale幫助程序處理破損locale,如Mozilla。

libSegFault處理segmentationfault信号,試圖捕捉segfaults。

libanl異步名稱查詢庫。

libbsd-compat為了在linux下執行一些BSD程序,libbsd-compat提供了必要的可移植性。

libc是主要的C庫--常用函數的集成。

libcrypt加密編碼庫。

libdl動态連接接口。

libgg++的運行時。

libieeeIEEE浮點運算庫。

libm數學函數庫。

libmcheck包括了啟動時需要的代碼。

libmemusage幫助memusage搜集程序運行時内存占用的信息。

libnsl網絡服務庫。

libnss*是名稱服務切換庫,包含了解釋主機名,用戶名,組名,别名,服務,協議等等的函數。

libpcprofile幫助内核跟蹤在函數,源碼行和命令中CPU使用時間。

libpthreadPOSIX線程庫。

libresolv創建,發送及解釋到互聯網域名服務器的數據包。

librpcsvc提供RPC的其他服務。

librt提供了大部分的POSIX.1b實時擴展的接口。

libthread_db對建立多線程程序的調試很有用。

libutil包含了在很多不同的Unix程序中使用的“标準”函數。

Glibc安裝依賴關系

Glibc依賴于:Bash,Binutils,Coreutils,Diffutils,Gawk,GCC,Gettext,Grep,Make,Perl,Sed,Texinfo.

上一篇:海洋和諧号

下一篇:衛若斯大屠殺

相關詞條

相關搜索

其它詞條