2

我正在为一个玩具项目编译一个基于 Newlib 的 Linux 工具链。

Newlib的官方页面报道:

Newlib 是一个用于嵌入式系统的 C 库。

但没有提供任何特别的理由。

我想弄清楚的是:

  1. 为什么 newlib 认为自己是“仅”嵌入的?
  2. 在桌面或服务器环境中使用它有什么缺点?
4

1 回答 1

4

与 Glibc 不同,Glibc 有非常具体的代码来确保它可以被更高的 API 兼容版本替换,Newlib 不是这样。无论如何它也不支持动态链接。并且在桌面环境中的每个可能的可执行文件中静态链接 C 库并没有多大意义。因此,Newlib 主要适用于具有少量静态链接可执行文件的嵌入式目标。

Newlib 也只实现了 C 标准库的一部分和 POSIX C 库扩展的最小部分。具体来说,它根本不关心网络如果有人在 2017 年想在完全没有任何网络的情况下构建一个桌面系统,这有点值得商榷。

另一件需要注意的是许可的非技术方面。Glibc 使用 LGPL 许可证,它允许链接到专有程序,前提是(请注意 IANAL)用户能够将 LGPL 许可的库替换为另一个库。在实践中,这意味着要么动态链接库,要么在静态链接库的情况下,为用户提供目标文件,他们可以使用这些目标文件链接替换库以生成可执行文件。这意味着许可证本身可能不适合带有专有软件的小型嵌入式系统。Newlib不包含任何 LGPL 代码,除非它是为 Linux 目标构建的

于 2017-10-31T06:53:38.057 回答