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_2.14エラーが発生するのですか?
プログラムはそのバージョンのシンボルに依存しており、それを提供していないシステムで実行しているためです。
2.19エラーではないでしょうか?
番号。
新しいシンボルが導入されると、それに割り当てられたバージョンを取得します。通常、そのバージョンはまだリリースされていない glibcバージョンです。つまり、現在リリースされているバージョンが2.13の場合、新しいシンボルにはバージョン2.14が割り当てられます。
そのバージョンstaysこのシンボルで(同じシンボルの新しい互換性のないバージョンが後で導入されない限り)。
x86_64
GLIBC-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
を呼び出すプログラムをリンクする場合、少なくとも version 2.2.5
が必要ですが、私のプログラムもepoll_create
を呼び出す場合、 2.3.2
の最小バージョンが必要です。
プログラムは、バージョンGLIBC_2.14
を持つシンボルを呼び出します。ほとんどの場合、次のようになります。
0000000000091620 g iD .text 000000000000003d GLIBC_2.14 memcpy
あなたのプログラムはnotで知られています。以下のシンボルのどれかを呼び出します(または、必要な別のバージョンを取得します):
$ 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
何
ldd --verbose simulator
与える?
GLIBC2.14が最低限必要だと思います。
システム上のlibc.soのバージョンは何ですか?