指定在Linux上启动可执行文件时要使用的动态链接器/加载程序

指定在Linux上启动可执行文件时要使用的动态链接器/加载程序,linux,linker,ld,glibc,uclibc,Linux,Linker,Ld,Glibc,Uclibc,我有一个奇怪的Linux系统,其中大多数软件都是针对Glibc编译的,还有一些是针对uClibc编译的 由于Linux在我启动并可执行时是一个标准发行版,所以从glibc调用标准动态链接器(/lib/ld.so.1) 我正在寻找一种在启动任何可执行文件之前指定动态加载程序的方法,这样当我想要运行针对uClibc编译的软件时,我可以定义启动机制来使用uClibc动态加载程序(/lib/ld uClibc.so.0) 有什么想法吗?在我看来,您似乎需要将PT_INTERP设置为指向一个替代的解释器,

我有一个奇怪的Linux系统,其中大多数软件都是针对Glibc编译的,还有一些是针对uClibc编译的

由于Linux在我启动并可执行时是一个标准发行版,所以从glibc调用标准动态链接器(/lib/ld.so.1)

我正在寻找一种在启动任何可执行文件之前指定动态加载程序的方法,这样当我想要运行针对uClibc编译的软件时,我可以定义启动机制来使用uClibc动态加载程序(/lib/ld uClibc.so.0)


有什么想法吗?

在我看来,您似乎需要将PT_INTERP设置为指向一个替代的解释器,而该解释器反过来更喜欢您喜欢的ld.so设备。请参阅elf(5)的手册页。See readelf将您拥有和看到的内容转储;您正在尝试将ld linux xxx.so.x更改为您提出的任何内容

事实上,在我看来,你只是想指出你的替代身份证,比如INTERP

我正在寻找一种方法,在启动任何可执行文件之前指定动态加载程序,以便在运行针对uClibc编译的软件时使用

在根据
uClibc
构建时,应该使用linker
--dynamic linker
参数指定正确的动态加载程序。例如

gcc -nostdlib -Wl,--dynamic-linker=/lib/ld-uClibc.so.0 \
   /lib/uClibc-crt1.o main.o -L/path/to/uClibc -lc

只需在调用可执行文件之前放置动态链接器的完整路径,例如:

/home/x20/tools/codescape-2016.05-3-mips-mti-linux-gnu/2016.05-03/sysroot/mipsel-r2-hard/lib64/ld-2.20.so out.gn/mipsel/d8

d8是我们要执行的二进制文件,ld-2.20也是动态链接器。查看
ld\u PRELOAD
?ld.1是ld\u预加载的东西。那太晚了。