1. 官网
主页:https://www.gnu.org/software/libc
1.1. What is glibc?什么是glibc
GNU C 库项目为 GNU 系统和 GNU/Linux 系统以及许多其他使用 Linux 作为内核的系统提供核心库。 这些库提供了关键的 API,包括 ISO C11、POSIX.1-2008、BSD、特定于操作系统的 API 等等。 这些 API 包括诸如 open、read、write、malloc、printf、getaddrinfo、dlopen、pthread_create、crypt、login、exit 等基础设施。
GNU C 库旨在成为向后兼容、可移植和高性能的 ISO C 库。 它旨在遵循所有相关标准,包括 ISO C11、POSIX.1-2008 和 IEEE 754-2008。
该项目大约在 1988 年开始,至今已有 30 多年的历史。 您可以在 wiki 上查看完整的项目发布历史。
GNU C 库每 6 个月发布一次。
1.2. Get started 开始
GNU C 库提供了许多由 C 或 C++ 语言编写的程序直接使用的低级别组件。许多编程语言间接使用 GNU C 库,包括 C#、Java、Perl、Python 和 Ruby(这些语言的解释器、VM 或编译代码直接使用 glibc)。
版本可通过源分支检出 ( gitweb ) 和 tarball通过 ftp 获得。 构建和测试库可参考:https://sourceware.org/glibc/wiki/Testing/Builds
1.3. Get Involved 参与其中
在这里可以查看master todo checklist(主待办事项清单)和list of bugs(缺陷列表)。
1.4. Sources 源码
在这里可以获取glibc源码(代码仓和压缩包),也可以通过web页面查看代码仓详情。
1.5. Documentation 文档
在这里可以查看:glibc手册、API手册页、wiki、FAQ等。
1.6. Report a bug 报告缺陷
在这里可以提bug和查bug: glibc的所有缺陷是通过Bugzilla平台进行管理: 评论中有关于该缺陷的描述和修复方法。
2. 社区wiki
主页:https://sourceware.org/glibc/wiki/HomePage wiki中有大量关于glibc的介绍,用户一定要好好的利用,其中主要分了六个部分,本章主要介绍第五个部分,即 Development(开发)。
2.1. 贡献
这里介绍了:glibc编码规范和约定、贡献和提交者清单、维护者和新架构移植贡献指南等。
请注意,如果您希望为glibc做出贡献,您需要将想法和补丁发送到libc-help@sourceware.org以进行初步审查。也就是说,是通过邮件的方式来贡献代码的,相同于linux内核的贡献方式。
2.2. 资源
2.2.1. 社区资源
主要的社区资源如下:
2.3. 内部文档
- 多线程安全
- 使用errlist-compat
- 动态加载器内部
- 平台特定的标题
- 指针加密
- 符号版本控制
- 命名空间控制:
- 保留供将来在每个标准 header 中使用的名称模式的有点过时的列表。
- 何时使用__ 前缀符号
- 条件代码:PIC、SHARED等。
- 插件:使用插件目录
- 对 thread_local 变量的析构函数支持
- 环境变量指南
- 系统调用包装器
- 锁省略实现指南
- NSCD 数据库文件布局
- 改进 libm
- 名称解析器
- 用于查询线程属性(堆栈、tls 等)的 API
- 与其他项目共享的源代码
- 模糊测试库
- Libmvec - 矢量数学库
- POWER 架构 - 循环内调用函数的自动向量化
- Malloc 内部结构
- 可调参数
2.4. 测试
- glibc 测试套件
- 测试 GLIBC 构建
- 针对 Gnulib 的测试套件进行测试
- 查找和修复与 check-localplt 相关的测试套件故障
- 为 glibc 内部编写白盒测试
2.5. 调试
- GLIBC 开发的调试技术。
- GLIBC ‘配置’ 调试(待办事项)。
- GLIBC ‘make’ 调试(待办事项)。
- 调试使用 GLIBC (todo) 的应用程序。
- GDB“漂亮打印机”的使用和开发用于/与 GLIBC。
2.6. 技巧和窍门
- 装载机提示和技巧。
- 为 x32 编译。
- 提供您自己的 FOO 版本。
- 拦截系统调用并提供您自己的 FOO 版本的另一个秘诀(专门针对 Ubuntu Linux 系统的说明)。
- Plash 项目有一些关于 GLIBC 的提示(主要是关于构建问题)。
- rtldi可用于同时安装多个版本的 GLIBC(特别是多个版本的动态链接器,ld.so)。
- 如何使用您自己的自定义 glibc 构建应用程序。
- 如何使用secure_getenv
|