问题背景
当在一个linux环境下运行一个现成的工具时,往往会出现错误libc.so.6:version `GLIBC_2.33' not found等。
这个错误表明你的程序或某个依赖库需要 GLIBC 2.33 版本的 C 标准库,但当前系统的 GLIBC 版本低于此要求。
一般可以直接运行libc库或者用ldd –version确认下当前的GLIBC版本,会发现当前系统版本是2.28,但是需要运行的工具程序需要2.33和2.34,所以GLIBC库不匹配导致运行失败。
解决方法
方法一、常规的方法,就是修改工具版本或者升级系统环境,这也是比较正确和安全的方法。但是这个改动较大,比较费时费力,而且也不一定能找到合适匹配的版本和环境,封闭的程序也不会有源码开放来进行编译修改。单独升级系统环境的GLIBC库的话,又会引出系统本身的一堆兼容问题来,严重点都有可能会导致系统崩溃。
方法二、把工具的依赖库移植一套到系统环境上。
第一步、这个工具依赖GLIBC 2.33和2.34,找到GLIBC2.34以上的版本,这个可以去官网下。
Downloads | GNU-A Downloads – Arm Developer
第二步、把这些依赖库,包含ld链接器,都拷贝到系统环境中。
第三步、ld-链接器 --library-path /new/lib/ ./工具程序
从图里可以看出,修改链接器后,原先不能运行的ls工具,可以运行,且效果和系统自带的ls一样。