У меня странная система Linux, в которой большая часть программного обеспечения скомпилирована против Glibc, а некоторые - против uClibc.
Поскольку Linux является стандартным дистрибутивом, когда я запускаю и выполняю, стандартный динамический компоновщик вызывается (/lib/ld.so.1) из glibc.
Я ищу способ указать динамический загрузчик перед запуском любого исполняемого файла, поэтому, когда я хочу запустить программное обеспечение, которое было скомпилировано с uClibc, я могу определить механизм запуска для использования динамического загрузчика uClibc (/lib/ld-uClibc.so.0 ).
Любые идеи?
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
Просто укажите полный путь к динамическому компоновщику перед вызовом исполняемого файла, например:
/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 - динамический компоновщик
Мне кажется, вам нужно установить PT_INTERP, чтобы он указывал на альтернативный интерпретатор, который, в свою очередь, предпочитает ваше предпочтительное устройство ld.so. См. Страницу руководства для elf (5). См. Readelf, чтобы сбросить то, что у вас есть, и увидеть; вы пытаетесь заменить ld-linux-xxx.so.x на все, что придумаете.
На самом деле, мне кажется, что вы просто хотите указать на свой альтернативный ld.so в качестве INTERP.
Похожие вопросы
Новые вопросы
linux
ВНИМАНИЕ: Все вопросы по Linux должны быть связаны с программированием; те, которые не будут закрыты. Используйте этот тег, только если ваш вопрос касается программирования с использованием API-интерфейсов Linux или поведения, специфичного для Linux, а не только потому, что вы запускаете свой код в Linux. Если вам нужна поддержка Linux, вы можете попробовать https://unix.stackexchange.com или сайт Stack Exchange конкретного дистрибутива Linux, например https://askubuntu.com или https://elementaryos.stackexchange.com/.
LD_PRELOAD
?