【问题标题】:/lib64/libc.so.6: version `GLIBC_2.14' not found/lib64/libc.so.6:未找到版本“GLIBC_2.14”
【发布时间】:2017-07-14 23:36:51
【问题描述】:

我面临以下关于 glibc 的错误。

./simulator: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./simulator)

我已经查看了有关此错误的几个文档,并且我了解到程序 simulator 是使用更高版本的 glibc 编译的,并且运行它的机器具有较低版本。 simulator 在 Ubuntu 14.04 机器上使用 glibc 2.19 编译。那么为什么我会收到 GLIBC_2.14 错误?不应该是2.19的错误吗?

【问题讨论】:

  • 但是您已经回答了这个问题 - 您需要安装更新的 glibc 才能运行该二进制文件。
  • 我的问题是为什么会出现 GLIBC2.14 错误?模拟器是用 2.19 编译的。不应该是2.19错误吗?
  • "并且运行它的机器版本较低"。也许你可以用另一种方式描述你的问题,
  • 以防万一,检查编译它的主机是否存在许多glib,然后使用哪个。其次,您可以在使用的libc的源代码中检查哪个版本是硬编码的,它是否遵循包版本。

标签: c glibc


【解决方案1】:

什么

ldd --verbose simulator

给?

我会说 GLIBC2.14 是最低要求。

您系统上的 libc.so 是什么版本?

【讨论】:

  • 在 Ubuntu 14.04(编译它的机器)上说 ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so .2 libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc .so.6 libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu /libc.so.6 libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6 libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux -gnu/libc.so.6
  • 我认为 GLIBC2.14 是您所说的最低要求。 @劳伦特
  • ldd --version 表示 2.19。怎么会和 GLIBC2.14 链接?
  • 我认为so 问题证实了这一点
  • @dmi GLIBC_2.14 是符号版本。 glibc 的作者在 glibc 2.14 中更改了一些函数的 ABI,并且这些函数得到了当时的版本号注解。您的二进制文件需要其中一些功能。它不需要 glibc 2.19,因为您的二进制文件不需要任何特定于 glibc 2.19 的功能。但它需要 glibc 2.14 中添加的功能
【解决方案2】:

那么为什么我会收到 GLIBC_2.14 错误?

因为您的程序依赖于具有该版本的符号,并且您在不提供它的系统上运行它。

不应该是2.19的错误吗?

没有。

当一个新符号被引入时,它会获得一个分配给它的版本。通常该版本是尚未发布 glibc 版本,即如果当前发布的版本是 2.13,则新符号将获得分配给它的 2.14 版本。

该版本保留与此符号(除非稍后引入相同符号的新且不兼容的版本)。

x86_64GLIBC-2.19 具有以下版本符号:

$ objdump -T /lib/x86_64-linux-gnu/libc.so.6 | grep ' g ' | head
0000000000078110 g    DF .text  0000000000000124  GLIBC_2.2.5 putwchar
0000000000096a70 g    DF .text  0000000000000020  GLIBC_2.2.5 __strspn_c1
000000000010a2b0 g    DF .text  0000000000000010  GLIBC_2.4   __gethostname_chk
0000000000096a90 g    DF .text  000000000000001a  GLIBC_2.2.5 __strspn_c2
0000000000110570 g    DF .text  00000000000000a5  GLIBC_2.2.5 setrpcent
00000000000a7ba0 g    DF .text  000000000000000a  GLIBC_2.2.5 __wcstod_l
0000000000096ab0 g    DF .text  0000000000000022  GLIBC_2.2.5 __strspn_c3
00000000000fa950 g    DF .text  0000000000000021  GLIBC_2.3.2 epoll_create
000000000010a2c0 g    DF .text  0000000000000010  GLIBC_2.4   __getdomainname_chk
00000000000fab60 g    DF .text  0000000000000021  GLIBC_2.2.5 klogctl
....

也就是说,如果我链接一个调用putwchar 的程序,我将需要至少 版本2.2.5,但如果我的程序也调用epoll_create,那么我将需要一个最低版本2.3.2 的版本。

你的程序调用了一些版本为GLIBC_2.14的符号,很可能是这个:

0000000000091620 g   iD  .text  000000000000003d  GLIBC_2.14  memcpy

已知您的程序调用以下任何符号(或者您将获得不同的所需版本):

$ objdump -T /lib/x86_64-linux-gnu/libc.so.6 | egrep 'GLIBC_2.1[5-9]'
000000000010ab30 g    DF .text  0000000000000014  GLIBC_2.16  __ppoll_chk
00000000001087d0  w   DF .text  000000000000003e  GLIBC_2.17  clock_getcpuclockid
000000000010aaf0 g    DF .text  0000000000000017  GLIBC_2.15  __fdelt_warn
000000000010aaf0 g    DF .text  0000000000000017  GLIBC_2.15  __fdelt_chk
000000000003c6b0 g    DF .text  00000000000000fc  GLIBC_2.18  __cxa_thread_atexit_impl
00000000000fb070 g    DF .text  0000000000000024  GLIBC_2.15  process_vm_writev
00000000000bd420 g    DF .text  00000000000001ba  GLIBC_2.15  scandirat
00000000000af970 g    DF .text  0000000000000019  GLIBC_2.16  c16rtomb
00000000001088f0  w   DF .text  0000000000000090  GLIBC_2.17  clock_nanosleep
00000000000af6e0 g    DF .text  0000000000000282  GLIBC_2.16  mbrtoc16
00000000000a3c70  w   DF .text  0000000000000230  GLIBC_2.16  mbrtoc32
0000000000000000 g    DO *ABS*  0000000000000000  GLIBC_2.15  GLIBC_2.15
0000000000000000 g    DO *ABS*  0000000000000000  GLIBC_2.16  GLIBC_2.16
0000000000000000 g    DO *ABS*  0000000000000000  GLIBC_2.17  GLIBC_2.17
0000000000000000 g    DO *ABS*  0000000000000000  GLIBC_2.18  GLIBC_2.18
00000000000b9f40 g    DF .text  0000000000000042  GLIBC_2.16  timespec_get
0000000000083120  w   DF .text  0000000000000009  GLIBC_2.16  aligned_alloc
0000000000108810  w   DF .text  0000000000000025  GLIBC_2.17  clock_getres
0000000000108880  w   DF .text  0000000000000064  GLIBC_2.17  clock_settime
00000000000f8240  w   DF .text  0000000000000068  GLIBC_2.16  getauxval
00000000000e44f0 g    DF .text  0000000000000015  GLIBC_2.15  posix_spawn
0000000000108840  w   DF .text  000000000000003b  GLIBC_2.17  clock_gettime
00000000000a3ea0  w   DF .text  00000000000001ea  GLIBC_2.16  c32rtomb
000000000003c0b0  w   DF .text  000000000000001b  GLIBC_2.17  secure_getenv
000000000010ab10 g    DF .text  0000000000000014  GLIBC_2.16  __poll_chk
00000000000f8240 g    DF .text  0000000000000068  GLIBC_2.16  __getauxval
00000000000fb040 g    DF .text  0000000000000024  GLIBC_2.15  process_vm_readv
00000000000bd420  w   DF .text  00000000000001ba  GLIBC_2.15  scandirat64
00000000000e4510 g    DF .text  0000000000000015  GLIBC_2.15  posix_spawnp

【讨论】:

    【解决方案3】:

    如果一切都失败了,只需下载较早版本的 BLAST。似乎这些错误发生在较新的版本中。

    安装ncbi-blast-2.8.1,而不是ncbi-blast-2.9.0,为我解决了这个问题。

    【讨论】:

      【解决方案4】:

      在 ubuntu 中使用 pyinstaller 生成构建时,我在 Debian 中遇到了同样的错误。 我通过在 centos7 中生成构建解决了这个错误。 构建工作正常。

      【讨论】:

        猜你喜欢
        • 2020-11-06
        • 2016-08-19
        • 2018-11-06
        • 1970-01-01
        • 2019-07-19
        • 2019-12-23
        • 1970-01-01
        • 2018-03-16
        • 2015-06-05
        相关资源
        最近更新 更多