工具链入门指南
1. 工具链简介
工具链中的元组能指示CPU、内核和用户空间的信息。例如 x86_64-linux-gnu
表示x86_64的CPU、Linux内核和GNU用户空间。当在机器上安装原生编译器时,通常会为工具链中的每个工具创建无前缀的链接,这样就能使用 gcc
命令调用C编译器。
下面是使用交叉编译器的示例:
$ mipsel-unknown-linux-gnu-gcc -dumpmachine
mipsel-unknown-linux-gnu
这个元组表示小端MIPS的CPU、未知厂商、Linux内核和GNU用户空间。
2. 选择C库
Unix操作系统的编程接口是用C语言定义的,现在由POSIX标准规定。C库是该接口的实现,是Linux程序访问内核的通道。即使使用Java或Python等其他语言编写程序,各自的运行时支持库最终也会调用C库。
C库需要内核服务时,会使用内核系统调用接口在用户空间和内核空间之间进行转换。虽然可以直接进行内核系统调用绕过C库,但这很麻烦且几乎没必要。
常见的C库有以下几种:
| C库名称 | 特点 | 适用场景 | 许可证 |
| ---- | ---- | ---- | ---- |
| glibc | 标准GNU C库,功能完整但体积大,配置性曾较差 | 一般情况 | LGPL 2.1 |
| musl libc | 较新的库,体积小且符合标准 | 内存和存