【发布时间】:2017-10-31 05:54:24
【问题描述】:
我正在为一个玩具项目编译基于 Newlib 的 Linux 工具链。
Newlib 官方页面报道:
Newlib 是一个用于嵌入式系统的 C 库。
但没有提供任何具体原因。
我想弄清楚的是:
- 为什么 newlib 认为自己是“仅”嵌入的?
- 在桌面或服务器环境中使用它有什么缺点?
【问题讨论】:
标签: c newlib linux-toolchain
我正在为一个玩具项目编译基于 Newlib 的 Linux 工具链。
Newlib 官方页面报道:
Newlib 是一个用于嵌入式系统的 C 库。
但没有提供任何具体原因。
我想弄清楚的是:
【问题讨论】:
标签: c newlib linux-toolchain
与 Glibc 不同,Glibc 具有非常具体的代码以确保它可以被更高的 API 兼容版本替换,Newlib 不是这样; nor does it support dynamic linking anyway。并且在桌面环境中的每个可能的可执行文件中静态链接 C 库并没有多大意义。因此,Newlib 主要适用于静态链接可执行文件数量较少的嵌入式目标。
Newlib 也只实现了 C 标准库的一部分和 POSIX C 库扩展的最小部分。具体来说,它根本不关心networking。在 2017 年,任何人是否想要构建一个完全没有任何网络的桌面系统,这有点值得商榷。
另外需要注意的是许可的非技术方面。 Glibc 使用 LGPL 许可证,它允许链接到专有程序,前提是(注意 IANAL)用户能够用另一个库替换 LGPL 许可的库。在实践中,这意味着要么动态链接库,要么在静态链接库的情况下,为用户提供目标文件,他们可以使用这些目标文件链接替换库以生成可执行文件。这意味着许可证本身可能不适合带有专有软件的小型嵌入式系统。新库doesn't contain any LGPL code, unless it is built for Linux targets.
【讨论】: