【问题标题】:How to fix "/lib/tls/libc.so.6: version `GLIBC_2.4' not found"?如何修复“/lib/tls/libc.so.6:找不到版本‘GLIBC_2.4’”?
【发布时间】:2009-05-28 11:52:04
【问题描述】:

我编译了一个二进制文件并复制到另一台机器上执行。但我收到上述错误。在第二台机器上,我无法安装新库。我尝试将第一台机器上的 libc 放入第二台机器上二进制文件的目录中,但链接器(正如我使用 ldd 发现的那样)仍然从标准路径 /lib/tls/libc.so.6 加载)。请让我知道对此的最小更改修复。

更新:

用于编译/链接的命令:

g++ -O2 -DNDEBUG -o CountStrings -I../../../../../tbb/tbb20_20080408oss_src/include/../src/CountStrings.cpp -L../../../../../tbb/tbb20_20080408oss_src/build/linux_ia32_gcc_cc4.3.2_libc2.8.90_kernel2.6.27_release/ -ltbb

libtbb.so 依赖于 libc.so.6

【问题讨论】:

  • 你能发布你的编译器和链接器命令吗?

标签: c++ linker


【解决方案1】:

事实上,解决此问题的更简单方法是升级您的操作系统版本

例如,Java 1.7 不能在 RedHat 4 上运行,但在 RedHat 5 上运行良好。

【讨论】:

    【解决方案2】:

    尝试为您的流程导出LD_LIBRARY_PATH=<location_of_your_lib>
    例如$ LD_LIBRARY_PATH=/home/kumar ./a.out
    将在其他任何地方之前在 /home/kumar/ 中查找库

    【讨论】:

      【解决方案3】:

      你检查过编译机上是否有静态版本的库吗?如果有你可以明确地链接它,使用 /lib/tls/libc.a 而不是 -L/lib/tls -lc (或任何你的方言)。

      【讨论】:

      • 或者可能只是尝试通过将 -static 参数传递给 ld 或 gcc 来静态链接整个二进制文件。
      • 我尝试过静态链接,但库没有静态版本。编译就退出了,说“/usr/bin/ld: cannot find -ltbb”
      【解决方案4】:

      我不确定使用系统提供的其他 libc 可能会产生什么(不良)副作用,但您可以尝试通过 LD_PRELOAD 强制使用您的特殊 libc 副本

      LD_PRELOAD=<location_of_your_lib> <yourprogram>
      

      【讨论】:

        猜你喜欢
        • 2023-01-17
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 2012-11-27
        相关资源
        最近更新 更多