LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1232|回复: 3

请高手解释一下什么是glibc

[复制链接]
发表于 2003-11-2 22:23:57 | 显示全部楼层 |阅读模式
请问GLIBC是什么东东啊?还有它和内核,连接器,GCC编译器之间到底是什么关西.我上网找了很长时间没找到结果.
请大哪位高手指点一下.  
发表于 2003-11-3 10:42:02 | 显示全部楼层
GLIBC 的內容
由於 glibc 囊括了幾乎所有的 UNIX 通行的標準,可以想見其內容包羅萬有。而就像其他的 UNIX 系統一樣,其內含的檔案群分散於系統的樹狀目錄結構中,像一個支架一般撐起整個作業系統。以 glibc-2.2 為例,這些檔案群主要包括:


分享函式庫群:
這是 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 底下,統稱為 man pages,其底下還分若干章?,其中第二章 (man2) 講的是系統呼叫,而第三章 (man3) 講的就是 libc 標準函式庫,這些都是系統開發者重要的參考資料。

而在 GNU 的系統中,除了 man pages 之外,還有一套稱為 info 的文件資料系統,而且裡頭的說明往往比 man pages 還要詳盡,這在 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 底下。
发表于 2003-11-3 10:42:37 | 显示全部楼层
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 平台去。這些標準包括:


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

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

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

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

XPG:
XPG 是 X/Open Portability Guide 的縮寫,是由 X/Open Company, Ltd. 所發表,同時 X/Open 還擁有 UNIX 商標的版權。而這份規格不但是 POSIX 標準的擴充,同時也明定了一個 UNIX 作業系統所應符合的要求。其中包括了 iconv() 字集轉換介面,以及部分 BSD 與 SVID 的特色。
除了上述的規格外,glibc 還內含了 GNU 特有的特色,稱之為 GNU Extension。這些特色在某些情況下可以方便程式的撰寫與維護,但就不見得可以移植到其他 UNIX 平台上,故在可移植性的考量下使用時必須留意。
发表于 2003-11-3 10:43:12 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表