【问题标题】:Newlib: embedded vs desktopNewlib:嵌入式与桌面
【发布时间】:2017-10-31 05:54:24
【问题描述】:

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

Newlib 官方页面报道:

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

但没有提供任何具体原因。

我想弄清楚的是:

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

【问题讨论】:

    标签: c newlib linux-toolchain


    【解决方案1】:

    与 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.

    【讨论】:

    • LGPL 还允许静态链接,只要提供了目标文件,因此最终用户可以使用不同版本的 LGPL 库重新链接。
    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多