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

时间:2014-08-16 21:37:40

标签: linux linker ld glibc uclibc

我有一个奇怪的Linux系统,其中大部分软件是针对Glibc编译的,而其他一些软件是针对uClibc编译的。

由于Linux是我发布和执行时的标准发行版,因此从glibc调用标准动态链接器(/lib/ld.so.1)。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

  

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

您应该使用链接器uClibc参数在构建时针对--dynamic-linker指定正确的动态加载程序。 E.g。

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

答案 1 :(得分:0)

在我看来,好像你需要将PT_INTERP设置为指向另一个解释器,而后者又更喜欢你喜欢的ld.so设备。请参阅elf(5)的手册页。看到readelf倾倒你所拥有的东西并看到;你试图把ld-linux-xxx.so.x改成你想出的任何东西。

实际上,它看起来好像你只是想指出你的替代ld.so作为INTERP。

答案 2 :(得分:0)

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

/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是动态链接器