3

Мои линкеры находятся в

/lib{32,64}/ld-2.20.so , с символическими ссылками на

/lib32/ld-linux.so.2 и

/lib64/ld-linux-x86-64.so.2 (для соответствующих ld-2.20.so s)

Когда я пытаюсь выполнить 32-битный двоичный файл, все хорошо. Они хорошо компилируются (я использую слегка измененный файл specs gcc) и, по-видимому, отлично связываются и работают нормально.

Когда я пытаюсь использовать ldd /path/to/example/32bit/binary , мне говорят, что это not a dynamic executable . Насколько я понимаю, это связано с невозможностью найти компоновщик для открытия исполняемого файла.

readelf -l example_binary | grep interpreter выдает [Requesting program interpreter: /lib32/ld-linux.so.2] , как и ожидалось.

Есть идеи, почему это происходит / как я могу это исправить?

PS - «Установка 32-битных библиотек совместимости с использованием sudo apt get ...» не полезна, так как не имеет apt/pacman/etcetera. Если мне нужно переустановить определенную (32-разрядную) библиотеку, то знание этого будет полезным!

Pps - Файлы сценариев, установленные gcc адресу /usr/lib{32,64}/libc.so группируют соответствующие (реальные) файлы libc.so.6 и libc_nonshared.a с AS_NEEDED ( /lib32/ld-linux.so.2 ) ) в хвостовой части для lib32

1 ответ1

2

Оказывается, это довольно легко.

/usr/bin/ldd - это просто файл сценария.

Открытие файла скрипта показывает строку в верхней части, которая вначале гласит (в моей системе):

RTLDLIST="/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2" .

Изменение этой строки на RTLDLIST="/lib32/ld-linux.so.2 /lib64/..." немедленно решило проблему.

Ps (добавление здесь в случае, если это помогает кому-то другому изо всех сил пытаться установить gobject-introspection) Решение также полезно при попытке установить gobject-introspection, потому что это вызывает ldd для разрешения библиотек.

Сообщение об ошибке, которое я получил, было: ERROR: can't resolve libraries to shared libraries: gobject-2.0, glib-2.0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .