【问题标题】:Compiling with glibc and running kernel that compiled with eglibc使用 glibc 编译并运行使用 eglibc 编译的内核
【发布时间】:2016-12-02 02:47:09
【问题描述】:

我正在使用运行嵌入式 linux 内核的 ARM 嵌入式系统 (ARM9)。内核是用 GCC 4.5.x 和 eglibc 编译的。 使用 GCC 4.8.x 或更高版本使用 glibc 编译代码的二进制文件是否有任何危害。

我了解到,出于稳定性原因,您不应该混合和匹配 libc。但据我了解,它们都与 ABI 兼容,所以应该没有任何问题。

我使用的一些代码需要 STD11 才能正确编译,因此我不能使用 GCC4.5。

【问题讨论】:

    标签: gcc gnu glibc eglibc


    【解决方案1】:

    内核是用 GCC 4.5.x 和 eglibc 编译的

    内核构建不使用 GLIBC,因此 libc 用于(不)用于构建内核完全无关。

    使用 GCC 4.8.x 或更高版本使用 glibc 编译代码的二进制文件是否有任何危害。

    没有。

    当二进制链接到 libc 时会发生什么?它在交叉编译时链接到 glibc,但会链接到 sysroot 中的 eglibc。

    一般来说,GLIBC 和 EGLIBC 保证向后兼容性:也就是说,与 GLIBC-x.y 链接的二进制文件可以在任何不早于 x.y 的 GLIBC 上正常运行。

    EGLIBC 与 GLIBC 的偏差非常小。 EGLIBC 允许禁用某些功能。与 EGLIBC-x.y 链接的二进制文件如果在运行时发现不早于 x.y 的 GLIBC 将正常运行(GLIBC 将具有二进制文件不会使用的功能(IF EGLIBC 实际上禁用了某些功能) ),但无论如何这很常见:二进制文件很少使用 每个 GLIBC 接口。

    【讨论】:

    • 二进制链接到 libc 时会发生什么?它在交叉编译时链接到 glibc,但将链接到 sysroot 中的 eglibc。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2015-08-16
    • 2013-10-05
    相关资源
    最近更新 更多