GNU C函数库

来自Local Chinese Wikipedia
(重定向自GNU C库
跳转到导航 跳转到搜索

package.lua第80行Lua错误:module 'Module:Format link' not found

页面Module:Infobox/styles.css没有内容。

GNU C库
File:Heckert GNU white.svg
原作者Roland McGrath
开发者GNU计划
首次发布1987年,​39年前​(1987[1]
当前版本Template:Software version
源代码库页面Template:Plainlist/styles.css没有内容。
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
编程语言C语言
引擎页面Template:Plainlist/styles.css没有内容。
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    操作系统类UNIX系统
    类型
    许可协议LGPLv2.1[2]
    网站www.gnu.org/software/libc/
    页面Module:Infobox/styles.css没有内容。
    File:Linux API.svg
    Linux API由Linux内核的系统调用接口、GNU C库(GNU)、libdrm、libalsa和libevdev组成。
    File:Linux kernel System Call Interface and glibc.svg
    Glibc是Linux内核系统调用的封装器。
    File:Linux API and Linux ABI.svg
    Linux内核和GNU C库共同构成了Linux API。编译后,二进制文件提供ABI。

    GNU C库,又名glibc,是GNU计划所实现的C标准库。尽管其名字中带有“C库”,但它现在也直接支持C++(以及间接支持其他编程语言)。它是自由软件基金会(FSF)在20世纪90年代初为他们的GNU操作系统设计的。它为GNU系统GNU/Linux系统和一些其他的类Unix系统提供了系统核心库。这些库提供了关键的API,包括ISO C11、POSIX.1-2008和BSD所规定的API和一些底层API,包括open、read、write、malloc、printf、getaddrinfo、dlopen、pthread_create、crypt、login、exit等。

    glibc在GNU宽通用公共许可证下发布。[2]

    历史[编辑]

    glibc项目最初主要由Roland McGrath编写,他在20世纪80年代为自由软件基金会(FSF)工作。[3]

    1988年,FSF称glibc已基本实现ANSI C所规定的内容[4] ;到1992年,它已经实现了ANSI C-1989POSIX.1-1990所规定的功能,并正在进行关于实现POSIX.2的工作。[5]

    1995年9月,Ulrich Drepper为glibc项目做出了他的第一个贡献,并在20世纪90年代逐渐成为glibc的核心贡献者和维护者。[6] Drepper担任维护员一职多年,直到2012年累计占项目总贡献的63%。[7]

    Linux libc[编辑]

    在20世纪90年代初,Linux内核的开发团队分叉了Glibc,名为“Linux libc”并单独维护。

    当FSF在1997年1月发布glibc 2.0时,由于glibc 2.0更符合POSIX标准,内核开发者停止了Linux libc的开发。[8] glibc 2.0还具有更好的国际化和翻译、IPv6功能、64位数据访问、多线程支持、未来版本的兼容性,而且代码更加可移植。[9]

    最后版本的Linux libc使用的库文件名是libc.so.5。因此,Linux上的glibc 2.x使用的库文件名称为libc.so.6[10]AlphaIA64 平台的glibc使用libc.so.6.1代替). 这些以.so为后缀的文件通常被缩写为libc6 (例如在Debian的软件包名中),遵循一般库的惯例。

    根据Richard Stallman的说法,由于开发者们的身份模糊,FSF无法将Linux libc做出的改动合并到glibc中。GNU项目对著作权相关的要求十分严格。[11]

    成立委员会[编辑]

    自2001年起,库的开发由 [12]一个监管委员会负责,[13]但保留了Drepper主要贡献者和维护者的身份。委员会的设立被Drepper公然说成是Richard Stallman的阴谋诡计,因而被公共争议所包围。[14][15][16]

    迁移到git[编辑]

    glibc以前被储存在CVS仓库中,2009年被迁移到Sourceware上的Git仓库。.[17]


    委员会解散[编辑]

    2012年3月,委员会投票决定解散,并撤销Drepper的职务,转而由Ryan Arnold、Maxim Kuvyrkov、Joseph Myers、Carlos O'Donell和Alexandre Oliva负责glibc的维护工作。但是,他们对于glibc没有额外的决策权。[18][19]

    在委员会解散后,Debian和其他使用glibc替代品的项目又迁移回到了glibc。[20] 从2014年开始,EGLIBC不再开发,因为它“现在的目标是在glibc上直接解决问题”。[21]

    2017年7月,在glibc创立30年时,Roland McGrath宣布不再直接参与项目,并宣布自己为名誉维护者。“过去这几个月,甚至过去几年,已经证明你们不再需要我了”。[3]

    版本历史[编辑]

    对于大多数系统来说,glibc的版本可以通过解析lib文件(例如,/lib/libc.so.6)获得。

    功能[编辑]

    glibc实现了单一UNIX规范、POSIX(1c、1d和1j)所要求的功能,并实现了ISO C11、ISO C99Berkeley Unix(BSD)接口、System V接口定义(SVID)和X/Open Portability Guide(XPG)4.2所要求的部分功能,并提供了所有符合XSI(X/Open System Interface)的系统所共有的扩展以及所有X/Open UNIX扩展。

    此外,glibc还提供了在开发GNU时被认为有用或必要的扩展。

    受支持的硬件和内核[编辑]

    glibc可以运行在许多不同的内核和不同的硬件架构上。官方支持的硬件架构[37] 包括: 32位ARM,AArch64C-SKYDEC AlphaIA-64Motorola m68kMicroBlazeMIPSNios IIPA-RISCPowerPCRISC-Vs390SPARC, 和 x86 (旧版本支持 TILE)。Glibc官方支持HurdLinux内核。此外,还有大量打过补丁的版本可以运行在FreeBSDNetBSD上(因此glibc也相应地支持Debian GNU/kFreeBSDDebian GNU/NetBSD,因为这些内核与FreeBSD和NetBSD的关联很大),以及OpenSolaris的分支版本。[38] Glibc的一个修改过的版本也被用在 BeOSHaiku中。[39]

    在小型设备中的使用[编辑]

    Glibc在过去因过于臃肿且速度比其他C库较慢,遭到一些开发者们的批评,如Linus Torvalds[40] 和一些嵌入式开发程序员。 出于这个原因,人们创建了几个用于在嵌入式平台替代Glibc的C标准库。这些库较Glibc更小。然而,许多嵌入式开发项目仍使用Glibc,因为它更加符合标准且兼容性更好。例如Openmoko[41] 和由iPaq使用的Familiar Linux(在使用GPE显示软件时)[42]

    相关条目[编辑]

    • package.lua第80行Lua错误:module 'Module:Ilh/data' not found
    • package.lua第80行Lua错误:module 'Module:Ilh/data' not found

    参考资料[编辑]

    1. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    2. 2.0 2.1 package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    3. 3.0 3.1 package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    4. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    5. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    6. glibc changelog on GitHub.
    7. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    8. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    9. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    10. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    11. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    12. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    13. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    14. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    15. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    16. rms-accused-of-attempting-glibc-hostile-takeover页面存档备份,存于互联网档案馆) on slashdot.com on August 19, 2001
    17. glibc repo页面存档备份,存于互联网档案馆) on Sourceware.com
    18. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    19. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    20. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    21. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    22. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    23. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    24. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    25. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    26. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    27. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    28. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    29. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    30. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    31. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    32. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    33. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    34. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    35. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    36. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    37. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    38. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    39. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    40. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    41. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
    42. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found

    外部链接[编辑]

    页面Module:Side box/styles.css没有内容。页面Template:Sister project/styles.css没有内容。

    package.lua第80行Lua错误:module 'Module:Navbar/configuration' not found package.lua第80行Lua错误:module 'Module:Navbar/configuration' not found package.lua第80行Lua错误:module 'Module:Navbar/configuration' not found