14

I am facing the following error regarding glibc.

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

I have gone through several documents regarding this error and I understand that the program simulator was compiled with higher version of glibc and the machine it is running on has a lower version. simulator was compiled with glibc 2.19 on Ubuntu 14.04 machine. So why am I getting GLIBC_2.14 error ? Shouldn't it be 2.19 error ?

Rishi
  • 185
  • 1
  • 2
  • 9
  • But you already answered this question - you need to have installed a newer glibc to run that binary. – dmi Feb 24 '17 at 08:10
  • my question is why am I getting GLIBC2.14 error ? simulator is compiled with 2.19. Shouldn't it be 2.19 error ? – Rishi Feb 24 '17 at 08:14
  • "and the machine it is running on has a lower version". Perhaps you could describe your issue somehow in another way, – dmi Feb 24 '17 at 08:16
  • Just in case, check whether at the host where it was compiled many glibs exist, then which one was used. And second, you can check in the source code of the used libc which version is hardcoded whether it follows the package version. – dmi Feb 24 '17 at 08:19

6 Answers6

19

So why am I getting GLIBC_2.14 error?

Because your program depends on a symbol with that version, and you are running it on a system which doesn't provide it.

Shouldn't it be 2.19 error?

No.

When a new symbol is introduced, it gets a version assigned to it. Usually that version is the not yet released glibc version, i.e. if the current released version is 2.13, the new symbol gets version 2.14 assigned to it.

That version stays with this symbol (unless a new and incompatible version of the same symbol is introduced later).

The x86_64 GLIBC-2.19 has the following versioned symbols:

$ 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
....

That is, if I link a program that calls putwchar, I will need at minimum version 2.2.5, but if my program also calls epoll_create, then I will need a minimum version of 2.3.2.

Your program calls some symbol with version GLIBC_2.14, most likely this one:

0000000000091620 g   iD  .text  000000000000003d  GLIBC_2.14  memcpy

Your program is known to not call any of the symbols below (or you would have gotten a different required version):

$ 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
Employed Russian
  • 199,314
  • 34
  • 295
  • 362
3

What

ldd --verbose simulator

gives ?

I'd say GLIBC2.14 is the minimum required.

What is the version of libc.so on your system ?

Laurent G
  • 397
  • 8
  • 16
  • on Ubuntu 14.04(machine where it is compiled) it says 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 – Rishi Feb 24 '17 at 11:05
  • i think GLIBC2.14 is the minimum required like you said. @Laurent – Rishi Feb 24 '17 at 11:09
  • ldd --version says 2.19. how come it is linking with GLIBC2.14? – Rishi Feb 24 '17 at 11:16
  • I think the [so](http://stackoverflow.com/questions/16928096/error-while-running-chromedriver-lib64-libc-so-6-version-glibc-2-14-not-fo?rq=1) question confirms that – Laurent G Feb 24 '17 at 11:26
  • @dmi GLIBC_2.14 is a symbol version. The glibc authors changed the ABI of some functions in glibc 2.14, and those functions get annotated with the version number at that time. Your binary requires some of those functions. It is not requiring glibc 2.19, because your binary does not need any feature that is specific to glibc 2.19. But it requires features that was added in glibc 2.14 – nos Feb 26 '17 at 01:51
1

For me, It was resolved by updating the system packages.

sudo apt-get update

Or you can re-install libc by the apt-get install libc6 package.

muhammad ali e
  • 655
  • 6
  • 8
0

If all else fails, just download an earlier version of BLAST. It appears that these errors occur with newer versions.

Installing ncbi-blast-2.8.1, instead of ncbi-blast-2.9.0, fixed this problem for me.

ProteinGuy
  • 1,754
  • 2
  • 17
  • 33
0

I was getting the same kind of error in Debian when was generating build using pyinstaller in ubuntu. I resolved this error by generating build in centos7. Build working fine.

Piyush Sonigra
  • 1,423
  • 11
  • 10
-1

Had the same issue, re-installed the lsscsi rpm package. It worked.

------------------
[root@host ~]# lsscsi
lsscsi: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by lsscsi)

-------------------
[root@c3-dl380g9-481 Packages]# ls | grep lsscsi
lsscsi-0.23-3.el6.x86_64.rpm
[root@c3-dl380g9-481 Packages]# rpm -ivh lsscsi-0.23-3.el6.x86_64.rpm
warning: lsscsi-0.23-3.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
   1:lsscsi                 ########################################### [100%]
[root@c3-dl380g9-481 Packages]# lsscsi
[0:0:0:0]    disk    HP       LOGICAL VOLUME   7.00  /dev/sda
[0:3:0:0]    storage HP       P440ar           7.00  -
[6:0:0:0]    cd/dvd  hp       CDDVDW SU-208GB  JM00  /dev/sr0
.

. .

  • 1
    Welcome to stackoverflow! While the error message that you got looks the same as in the question, you're solution will probably not work for the OP for several reasons. 1.: he uses a different linux distribution. Ubuntu does not manage packages with `rpm` 2.: You solved your problem by reinstalling the lsscsi package. The problem of the OP was not with lsscsi tough, but with a program named ./simulate. If you read through the other answers you will find, that the problem was related to incompatible glibc versions on different machines. This has nothing to do with lsscsi – Jakob Stark Jan 25 '22 at 12:16