【问题标题】:Glibc and uClibc side by side on one systemGlibc 和 uClibc 在一个系统上并排
【发布时间】:2010-11-05 07:57:50
【问题描述】:

是否可以在一个系统上同时运行基于 glibcuClibc 的应用程序?

背景: 我们有基于二进制 gcc 的交叉编译器配置为与 uClibc 链接。我们已经用它交叉编译了 glibc。现在我们要构建一些应用程序,以便它们与 glibc 而不是 uClibc 链接。我们不想重建编译器。

【问题讨论】:

    标签: c linux gcc glibc uclibc


    【解决方案1】:

    glibc 和 uClibc 并存,一些程序链接到一个,而其他程序链接到另一个,这没有问题。但是,附加库存在问题。您系统上的每个共享库都将针对 glibc 或 uClibc 构建(使用相应的头文件,它们为标准库函数定义不同的 ABI),例如,如果 glibc 程序和 uClibc 程序都需要 ncurses,则需要构建两个版本的 ncurses,并有办法确保在运行时加载给定程序的正确版本。或者,您可以选择仅使用一组共享库,并将静态库用于链接到另一个 libc 的程序,但您仍然需要构建 2 组库。

    【讨论】:

    • 问题是即使是简单的“hello world”应用程序也使用基于 uClibc 的 GCC 编译并与 glibc 段错误链接。我们必须构建整个工具链才能让“hello world”正常工作。
    • 是的,必须构建整个工具链是意料之中的。
    【解决方案2】:

    是的,这应该是完全可能的,但您可能不得不使用 LD_PRELOAD_PATH。如果您是静态链接,请更改为动态链接。

    【讨论】:

      【解决方案3】:

      几乎不可能将它们混合在同一个 FHS 中,因为 ABI 和包含目录不兼容。但是,您可以通过调整 ELF 中的动态链接器字段并利用 gcc/binutils 中的 sysroot 功能将它们中的任何一个安装在目录偏移中。 Gentoo 社区[1] 正在进行一项实验,称为 Prefix/libc。

      1. http://wiki.gentoo.org/wiki/Prefix/libc

      【讨论】:

        猜你喜欢
        • 2011-06-11
        • 2011-12-10
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        相关资源
        最近更新 更多