GNU C 庫，又名 glibc，是 GNU 計劃所實現的 C 標準庫。儘管其名字中帶有 C 庫，但它現在也直接支援 C（以及間接支援其他程式語言）。它是自由軟體基金會（FSF）在 20 世紀 90 年代初為他們的 GNU 作業系統設計的。它為 GNU 系統，GNULinux 系統和一些其他的類 Unix 系統提供了系統核心庫。這些庫提供了關鍵的 API，包括 ISO C11、POSIX12008 和 BSD 所規定的 API 和一些底層 API，包括 open、read、write、malloc、printf、getaddrinfo、dlopen、pthread_create、crypt、login、exit 等。 glibc 在 GNU 寬通用公共許可證下發布。 歷史 glibc 專案最初主要由 Roland McGrath 編寫，他在 20 世紀 80 年代為自由軟體基金會（FSF）工作。 1988 年，FSF 稱 glibc 已基本實現 ANSI C 所規定的內容 ；到 1992 年，它已經實現了 ANSI C1989 和 POSIX11990 所規定的功能，並正在進行關於實現 POSIX2 的工作。 1995 年 9 月，Ulrich Drepper 為 glibc 專案做出了他的第一個貢獻，並在 20 世紀 90 年代逐漸成為 glibc 的核心貢獻者和維護者。glibc changelog on GitHub Drepper 擔任維護員一職多年，直到 2012 年累計佔專案總貢獻的 63。 Linux libc 在 20 世紀 90 年代初，Linux 核心的開發團隊分叉了 Glibc，名為 Linux libc 並單獨維護。 當 FSF 在 1997 年 1 月釋出 glibc 20 時，由於 glibc 20 更符合 POSIX 標準，核心開發者停止了 Linux libc 的開發。 glibc 20 還具有更好的國際化和翻譯、IPv6 功能、64 位資料訪問、多執行緒支援、未來版本的相容性，而且程式碼更加可移植。 最後版本的 Linux libc 使用的庫檔名是 libcso5。因此，Linux 上的 glibc 2x 使用的庫檔名稱為 libcso6。 （Alpha 和 IA64 平臺的 glibc 使用 libcso61 代替） 這些以so 為字尾的檔案通常被縮寫為 libc6 （例如在 Debian 的軟體包名中），遵循一般庫的慣例。 根據 Richard Stallman 的說法，由於開發者們的身份模糊，FSF 無法將 Linux libc 做出的改動合併到 glibc 中。GNU 專案對版權相關的要求十分嚴格。 成立委員會 自 2001 年起，庫的開發由 一個監管委員會負責，但保留了 Drepper 主要貢獻者和維護者的身份。委員會的設立被 Drepper 公然說成是 Richard Stallman 的陰謀詭計，因而被公共爭議所包圍。rmsaccusedofattemptingglibchostiletakeover on slashdotcom on August 19， 2001 遷移到 git glibc 以前被儲存在 CVS 倉庫中，2009 年被遷移到 Sourceware 上的 Git 倉庫。glibc repo on Sourcewarecom 委員會解散 2012 年 3 月，委員會投票決定解散，並撤 銷 Drepper 的職務，轉而由 Ryan Arnold、Maxim Kuvyrkov、Joseph Myers、Carlos ODonell 和 Alexandre Oliva 負責 glibc 的維護工作。但是，他們對於 glibc 沒有額外的決策權。 在委員會解散後，Debian 和其他使用 glibc 替代品的專案又遷移回到了 glibc。 從 2014 年開始，EGLIBC 不再開發，因為它 現在的目標是在 glibc 上直接解決問題。 2017 年 7 月，在 glibc 創立 30 年時，Roland McGrath 宣佈不再直接參與專案，並宣佈自己為名譽維護者。過去這幾個月，甚至過去幾年，已經證明你們不再需要我了。 版本歷史 對於大多數系統來說，glibc 的版本可以透過解析 lib 檔案（例如，liblibcso6）獲得。 版本 日期 註釋 使用該版本的作業系統 01 06 199110 199202 10 199202 101 1093 199203 199412 190 1102 199605 199701 20 199701 201 199701 202 199702 2091 199712 2095 199807 21 199902 211 199903 22 200011 221 200101 222 200102 223 200103 224 200107 23 200210 231 200210 232 200302 Debian 31 （Sarge） 233 200312 234 200412 支援 LSB30 RHEL 4 （Update 5） 235 200504 SLES 9 236 200511 Debian 40 （Etch） 24 200603 支援 LSB40，基本的 inotify 支援 SLES 10 25 200609 完整的 inotify 支援 RHEL 5 26 200705 27 200710 Debian 5 （Lenny）， Ubuntu 804 28 200804 29 200812 210 200905 211 200910 SLES 11， Ubuntu 1004， eglibc used in Debian 6 （Squeeze） 212 201005 RHEL 6 213 201101 eglibc 213 used in Debian 7 （Wheezy） 214 201106 215 201203 Ubuntu 1204 and 1210 216 201206 x32 ABI 支援 ，遵守 C11， SystemTap 217 201212 64 位 ARM 支援 Ubuntu 1304， RHEL 7 218 201308 加入 C11 支援。支援英特爾 TSX 鎖精確定位。支援 Xilinx MicroBlaze 和 IBM POWER8 微架構。 Fedora 20 219 201402 GNU 間接函式 （IFUNC） 支援 ppc32 和 ppc64。新增功能測試宏 _DEFAULT_SOURCE，以取代 _SVID_SOURCE 和 _BSD_SOURCE。在手冊中對所有功能進行了初步的安全記錄。對 s390s390x 的 ucontext 和 jmp_buf 進行了 ABI 更改。 Ubuntu 1404， Debian 8 （Jessie）所使用的 eglibc 219， openSUSE 13， SLES 12 220 201409 支援檔案描述鎖 Fedora 21 221 201502 新的旗語實現 Ubuntu 1504， Fedora 22 222 201508 支援啟用 Google Native Client （NaCl） Fedora 23 223 201602 Unicode 80 Fedora 24， Ubuntu 1604 224 201608 刪除了一些過時的功能 Fedora 25， Ubuntu 1610 and 1704， Debian 9 （Stretch） 225 201702 getentropy 和 getrandom 函式， 以及 sysrandomh 標頭檔案 被加入 Fedora 26 226 201708 提高效能（malloc 的執行緒快取），支援 Unicode 10。 Fedora 27， Ubuntu 1710 227 201802 效能提升 RISCV 支援 Fedora 28， Ubuntu 1804 228 201808 statx， renameat2， Unicode 1100 Ubuntu 1810， RHEL 800， Debian 10 （Buster）， Fedora 29 229 201902 透過將所有 locale 透過一個包含檔案的目錄的方式構建和安裝 最佳化三角函式 posix_spawn_file_actions_addchdir_np 和 posix_spawn_file_actions_addfchdir_np popen 和 system 不再執行 atfork 處理程式 支援在 CSKY ABIV2 上的 Linux 中執行 strftime 的語言環境替代了年份的預設格式； 現在可以將 _ 和 符號用於其 ％EY Ubuntu 1904， Fedora 30 230 201902 Unicode 1210， 動態連結器接受 preload 引數來預載共享物件，Linux 上增加了 gettid 函式， 支援民國曆， 新的日本年代被加入 ja_JP locale；總物件大小大於 PTRDIFF_MAX 時記憶體分配函式失效；被修復 Ubuntu 1910， Fedora 31 231 202002 加入 C2x 標準支援 Ubuntu 2004， Fedora 32 232 202008 Unicode 130，access 屬性在 GCC 10 中提供更友好的警告，即 幫助檢測緩衝區溢位和其他越界訪問。 Ubuntu 2010 Fedora 33 233 202102 加入 HWCAPS 標誌 Ubuntu 2104 Fedora 34 234 202108 libpthread libdl libutil libanl 被整合進 libc 中 Ubuntu 2110 RHEL 900 Fedora 35 235 202202 Unicode 140 CUTF8 locale restartable sequences 移除 Intel MPX 支援 Ubuntu 2204 Fedora 36 236 202208 Ubuntu 2210 237 202302 功能 glibc 實現了單一 UNIX 規範、POSIX（1c、1d 和 1j）所要求的功能，並實現了 ISO C11、ISO C99、Berkeley Unix（BSD）介面、System V 介面定義（SVID）和 XOpen Portability Guide（XPG）42 所要求的部分功能，並提供了所有符合 XSI（XOpen System Interface）的系統所共有的擴充套件以及所有 XOpen UNIX 擴充套件。 此外，glibc 還提供了在開發 GNU 時被認為有用或必要的擴充套件。 受支援的硬體和核心 glibc 可以執行在許多不同的核心和不同的硬體架構上。官方支援的硬體架構 包括 32 位 ARM，AArch64， CSKY， DEC Alpha， IA64， Motorola m68k， MicroBlaze， MIPS， Nios II， PARISC， PowerPC， RISCV， s390， SPARC， 和 x86 （舊版本支援 TILE）。Glibc 官方支援 Hurd 和 Linux 核心。此外，還有大量打過補丁的版本可以執行在 FreeBSD 和 NetBSD 上（因此 glibc 也相應地支援 Debian GNUkFreeBSD 和 Debian GNUNetBSD，因為這些核心與 FreeBSD 和 NetBSD 的關聯很大），以及 OpenSolaris 的分支版本。 Glibc 的一個修改過的版本也被用在 BeOS 和 Haiku 中。 在小型裝置中的使用 Glibc 在過去因過於臃腫且速度比其他 C 庫較慢，遭到一些開發者們的批評，如 Linus Torvalds 和一些嵌入式開發程式設計師。 出於這個原因，人們建立了幾個用於在嵌入式平臺替代 Glibc 的 C 標準庫。這些庫較 Glibc 更小。然而，許多嵌入式開發專案仍使用 Glibc，因為它更加符合標準且相容性更好。例如 Openmoko 和由 iPaq 使用的 Familiar Linux（在使用 GPE 顯示軟體時）。 相關條目 參考資料 外部連結 CategoryC 標準函式庫 Category 自由跨平臺軟體 Category 自由發展元件與函式庫 Category 用 C 程式設計的自由軟體 CategoryGNU 計劃軟體 CategoryLinux 核心介面 CategoryLinux API