【问题标题】:Using libc and libm from RHEL 6 to RHEL 7从 RHEL 6 到 RHEL 7 使用 libc 和 libm
【发布时间】:2020-10-31 03:59:58
【问题描述】:

我的应用程序链接到基于 RHEL 6 构建的库。当我在 RHEL 7 上编译此应用程序时,链接器会引发 glibc 版本的错误。 以下是错误之一:

对符号“__tls_get_addr@@GLIBC_2.12”的未定义引用 /lib64/ld-linux-x86-64.so.2:添加符号时出错:命令行中缺少 DSO collect2:错误:ld 返回 1 个退出状态

为了进行修复,我将 libc 和 libm 从 RHEL 6 复制到 RHEL 7,并与这些以及从 RHEL 7 的 libc 和 libm 链接。如果我将 libc 和 libm 从 RHEL 6 复制到 RHEL 7,它会在运行时引起问题吗? 还有其他方法可以解决此类问题吗?

谢谢, 曼格什·萨旺特。

【问题讨论】:

    标签: compilation glibc


    【解决方案1】:

    虽然 Red Hat Enterprise Linux 6 附带 glibc 2.12,但它没有 __tls_get_addr@GLIBC_2.12 版本符号,只有 __tls_get_addr@GLIBC_2.3。该符号也出现在以后的 glibc 版本中。

    我不认为你所面临的问题可以通过降级 glibc 来解决。正如Employed Russian所说,覆盖系统glibc无论如何都会使系统无法启动。

    【讨论】:

      【解决方案2】:

      如果我将 libc 和 libm 从 RHEL 6 复制到 RHEL 7,会在运行时引起问题吗?

      libc.so.6libm.so.6 从 RHEL6 复制到例如~/rhel6/libs/tmp 不会引起任何问题(您已经这样做了)。

      但是用 RHEL6 的副本覆盖 RHEL7 的/lib64/libc.so.6 可能会使每个 RHEL7 系统上的程序崩溃,并导致该系统无法启动。确保您有备份和应急磁盘,并且如果您决定尝试此操作,请知道如何使用它。

      还有其他方法可以解决这些问题吗?

      解决此问题的正确方法是使用针对所需 GLIBC 的工具链进行构建。更多信息here

      【讨论】:

        猜你喜欢
        • 2018-11-05
        • 2021-01-09
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        • 2017-01-28
        • 1970-01-01
        相关资源
        最近更新 更多