繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM