我需要在不太新的 RHEL 5.6 上运行相对较新的包。
我有lib3rdparty.so
针对 glibc 2.6 编译的 3rd 方库 (),而 RHEL 5.6 仅安装了 2.5。但是在图书馆里只有几个引用sched_getcpu@@GLIBC_2.6
。我已经像这样检查过
readelf -s lib3rdparty.so | egrep "@GLIBC_2.[6-9]"
GLIBC_2.5
查找对比已安装的更新的东西的引用。输出是
0 FUNC GLOBAL DEFAULT UND sched_getcpu@GLIBC_2.6 (62)
0 FUNC GLOBAL DEFAULT UND sched_getcpu@@GLIBC_2.6
所以,我只有一个功能GLIBC_2.6
。现在我想让图书馆认为我有这个功能。为此,我伪造了这里libcheat.so
提到的小型库 () 。现在我有文件,如果运行,将显示此字符串:libcheat.so
readelf
10 FUNC GLOBAL DEFAULT 11 sched_getcpu@@GLIBC_2.6
使用这个库,我成功地构建了与lib3rdparty.so
. 如果没有这个库,我将无法构建任何东西,因为ld
找不到对sched_getcpu
.
但问题在于运行此文件:当我尝试运行它时,出现以下错误:
./hello_world: version `GLIBC_2.6' not found (required by ./lib3rdparty.so)
所以,我相信还有最后一步可以让它发挥作用,但我不知道该怎么做。我尝试使用/etc/ld.conf.preload
和导出LD_LIBRARY_PATH
,因此它会指向我的库,以便在其他人之前加载。但它不会运行。试图运行它,strace
但没有有意义的输出。
有任何想法吗?