如何支持多个不同版本的glibc

开发用的机器一般不会随意升级运行库,但一些新功能的工具又是需要新版本的运行库

怎么办呢?

 

1.工具如果是自己编译的,加编译参数

-Wl,–rpath=/path/to/newglibc \
-Wl,–dynamic-linker=/path/to/newglibc/ld-linux.so.2

 

2.不是自己编译的,如果只是单个文件,如下运行

LD_PRELOAD=/data/glibc-2.28/lib/libc.so.6 LD_LIBRARY_PATH=./ /data/glibc-2.28/lib/ld-2.28.so ./test

 

3.如果很多文件,可以用一个工具patchelf修改加载器和库路径

https://github.com/NixOS/patchelf/releases

patchelf --set-interpreter /my/lib/my-ld-linux.so.2 program

patchelf --set-rpath /opt/my-libs/lib:/foo/lib program

 

或者你会想,为什么不可以改LD_LIBRARY_PATH呢,因为改了环境变量,会影响系统原来程序的运行,可能会让程序崩溃,甚至ls都会崩溃

posted @ 2023-02-21 10:22  江翁  阅读(1715)  评论(0)    收藏  举报