[英]Specifying the dynamic linker / loader to be used when launching an executable on Linux
我有一个奇怪的Linux系统,其中大多数软件是针对Glibc编译的,而另一些则针对uClibc编译的。
由于当我启动并执行Linux时是Linux的标准发行版,因此会从glibc调用(/lib/ld.so.1)标准动态链接器。
我正在寻找一种在启动任何可执行文件之前指定动态加载器的方法,因此当我要运行针对uClibc编译的软件时,我可以定义启动机制以使用uClibc动态加载器(/lib/ld-uClibc.so.0 )。
有任何想法吗?
我正在寻找一种在启动任何可执行文件之前指定动态加载器的方法,以便在我要运行针对uClibc编译的软件时
使用链接器--dynamic-linker
参数针对uClibc
进行构建时,您应该指定正确的动态加载--dynamic-linker
。 例如
gcc -nostdlib -Wl,--dynamic-linker=/lib/ld-uClibc.so.0 \
/lib/uClibc-crt1.o main.o -L/path/to/uClibc -lc
在我看来,您好像需要将PT_INTERP设置为指向备用解释器,该解释器反过来会偏爱您首选的ld.so设备。 请参见elf(5)的手册页。 请参阅readelf来转储您所拥有的并查看; 您正在尝试将ld-linux-xxx.so.x更改为您想要的。
实际上,在我看来,好像您只是要指向替代ld.so(即INTERP)一样。
只需在调用可执行文件之前将完整路径放在动态链接器中,例如:
/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.so是动态链接器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.