在新的 Linux 系统上编译的动态库,在一些老的 Linux 上面运行,有时候会报下列错误
/lib64/libc.so.6: version 'GLIBC_2.14' not found
这一般是因为老的系统没有最新的 GLIBC_2.14
,而创建动态库的机器上使用的是 GLIB2 2.14
的 memcpy
, 这个库函数为了解决重叠拷贝问题而进行了修正。如果用到的只是这一个函数的话,可以通过修改动态库中的版本标识,让其可以老系统上面运行。
首先查看一下动态库依赖的 GLIBC
版本信息
readelf -V /path/to/_pytransform.so
...
Version needs section '.gnu.version_r' contains 2 entries:
Addr: 0x00000000000056e8 Offset: 0x0056e8 Link: 4 (.dynstr)
000000: Version: 1 File: libdl.so.2 Cnt: 1
0x0010: Name: GLIBC_2.2.5 Flags: none Version: 7
0x0020: Version: 1 File: libc.so.6 Cnt: 6
0x0030: Name: GLIBC_2.7 Flags: none Version: 8
0x0040: Name: GLIBC_2.14 Flags: none Version: 6
0x0050: Name: GLIBC_2.4 Flags: none Version: 5
0x0060: Name: GLIBC_2.3.4 Flags: none Version: 4
0x0070: Name: GLIBC_2.2.5 Flags: none Version: 3