Newlib:嵌入式与桌面
Newlib: embedded vs desktop
我正在为玩具项目编译一个基于 Newlib 的 Linux 工具链。
Newlib官网报道:
Newlib is a C library intended for use on embedded systems.
但没有提供任何特殊原因。
我想弄清楚的是:
- 为什么 newlib 认为自己是嵌入式的 "only"?
- 在桌面或服务器环境中使用它有什么缺点?
与 Glibc 不同,它有非常具体的代码来确保它可以被后来的 API 兼容版本替换,Newlib 则不然; nor does it support dynamic linking anyway。在桌面环境中的每个可能的可执行文件中,在 C 库中静态 link 没有多大意义。因此,Newlib 最适合具有少量静态 linked 可执行文件的嵌入式目标。
Newlib 也只实现了 C 标准库的部分和 POSIX C 库扩展的最小部分。具体来说,它根本不关心 networking 。在 2017 年,任何人 是否会想在完全没有任何网络的情况下构建一个桌面系统,这有点值得商榷。
另一件需要注意的事情是许可的非技术方面。 Glibc 使用 LGPL 许可证,它允许 linking 针对专有程序,前提是(注意 IANAL)用户能够用另一个库替换 LGPL 许可的库。实际上,这意味着库是动态 linked 的,或者在静态 linked 库的情况下,为用户提供了他们可以用来 link针对替换库生成可执行文件。这意味着许可证本身可能不适用于带有专有软件的小型嵌入式系统。新库 doesn't contain any LGPL code, unless it is built for Linux targets.
我正在为玩具项目编译一个基于 Newlib 的 Linux 工具链。
Newlib官网报道:
Newlib is a C library intended for use on embedded systems.
但没有提供任何特殊原因。
我想弄清楚的是:
- 为什么 newlib 认为自己是嵌入式的 "only"?
- 在桌面或服务器环境中使用它有什么缺点?
与 Glibc 不同,它有非常具体的代码来确保它可以被后来的 API 兼容版本替换,Newlib 则不然; nor does it support dynamic linking anyway。在桌面环境中的每个可能的可执行文件中,在 C 库中静态 link 没有多大意义。因此,Newlib 最适合具有少量静态 linked 可执行文件的嵌入式目标。
Newlib 也只实现了 C 标准库的部分和 POSIX C 库扩展的最小部分。具体来说,它根本不关心 networking 。在 2017 年,任何人 是否会想在完全没有任何网络的情况下构建一个桌面系统,这有点值得商榷。
另一件需要注意的事情是许可的非技术方面。 Glibc 使用 LGPL 许可证,它允许 linking 针对专有程序,前提是(注意 IANAL)用户能够用另一个库替换 LGPL 许可的库。实际上,这意味着库是动态 linked 的,或者在静态 linked 库的情况下,为用户提供了他们可以用来 link针对替换库生成可执行文件。这意味着许可证本身可能不适用于带有专有软件的小型嵌入式系统。新库 doesn't contain any LGPL code, unless it is built for Linux targets.