web-dev-qa-db-fra.com

/lib64/libc.so.6: version 'GLIBC_2.14' introuvable

Je suis confronté à l'erreur suivante concernant glibc.

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

J'ai parcouru plusieurs documents concernant cette erreur et je comprends que le programme simulator a été compilé avec la version supérieure de glibc et que la machine sur laquelle il s'exécute a une version inférieure .simulator a été compilé avec glibc 2.19 sur Ubuntu 14.04. Alors, pourquoi est-ce que je reçois une erreur GLIBC_2.14? Cela ne devrait-il pas être une erreur 2.19?

4
Rishi

Alors, pourquoi je reçois erreur GLIBC_2.14?

Parce que votre programme dépend d'un symbole avec cette version et que vous l'exécutez sur un système qui ne le fournit pas.

Cela ne devrait-il pas être une erreur 2.19?

Non.

Lorsqu'un nouveau symbole est introduit, il se voit attribuer une version. Habituellement, cette version est la version pas encore publiée glibc, c’est-à-dire si la version actuelle est 2.13, le nouveau symbole se voit attribuer la version 2.14.

Cette version reste avec ce symbole (sauf si une nouvelle version incompatible du même symbole est introduite ultérieurement).

Le x86_64GLIBC-2.19 a les symboles suivants:

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

C'est-à-dire que si je lie un programme qui appelle putwchar, j'aurai besoin de au minimum version 2.2.5, mais si mon programme appelle également epoll_create, il me faudra une version minimale de 2.3.2.

Votre programme appelle un symbole avec la version GLIBC_2.14, probablement celui-ci:

0000000000091620 g   iD  .text  000000000000003d  GLIBC_2.14  memcpy

Votre programme est connu pour pas appeler l’un des symboles ci-dessous (ou vous auriez une version requise différente):

$ 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
14
Employed Russian

Quoi

ldd --verbose simulator

donne?

Je dirais que GLIBC2.14 est le minimum requis.

Quelle est la version de libc.so sur votre système?

1
Laurent G