У меня странная система Linux, в которой большая часть программного обеспечения скомпилирована против Glibc, а некоторые - против uClibc.

Поскольку Linux является стандартным дистрибутивом, когда я запускаю и выполняю, стандартный динамический компоновщик вызывается (/lib/ld.so.1) из glibc.

Я ищу способ указать динамический загрузчик перед запуском любого исполняемого файла, поэтому, когда я хочу запустить программное обеспечение, которое было скомпилировано с uClibc, я могу определить механизм запуска для использования динамического загрузчика uClibc (/lib/ld-uClibc.so.0 ).

Любые идеи?

7
Ben Hirschberg 17 Авг 2014 в 01:37
Заглянуть в LD_PRELOAD?
 – 
Avery
17 Авг 2014 в 02:25
1
Ld.so.1 - это то, что делает LD_PRELOAD. Слишком поздно.
 – 
bmargulies
17 Авг 2014 в 02:33

3 ответа

Лучший ответ

Я ищу способ указать динамический загрузчик перед запуском любого исполняемого файла, поэтому, когда я хочу запустить программное обеспечение, которое было скомпилировано с uClibc

Вы должны указать правильный динамический загрузчик при построении против uClibc, используя аргумент компоновщика --dynamic-linker. Например.

gcc -nostdlib -Wl,--dynamic-linker=/lib/ld-uClibc.so.0 \
   /lib/uClibc-crt1.o main.o -L/path/to/uClibc -lc
6
Employed Russian 18 Авг 2014 в 05:26

Просто укажите полный путь к динамическому компоновщику перед вызовом исполняемого файла, например:

/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 - динамический компоновщик

2
Bogi 13 Окт 2017 в 12:28

Мне кажется, вам нужно установить PT_INTERP, чтобы он указывал на альтернативный интерпретатор, который, в свою очередь, предпочитает ваше предпочтительное устройство ld.so. См. Страницу руководства для elf (5). См. Readelf, чтобы сбросить то, что у вас есть, и увидеть; вы пытаетесь заменить ld-linux-xxx.so.x на все, что придумаете.

На самом деле, мне кажется, что вы просто хотите указать на свой альтернативный ld.so в качестве INTERP.

0
bmargulies 17 Авг 2014 в 02:39