
Мои линкеры в
/lib{32,64}/ld-2.20.so
, с символическими ссылками на
/lib32/ld-linux.so.2
и
/lib64/ld-linux-x86-64.so.2
(к соответствующим ld-2.20.so
с)
Когда я пытаюсь запустить 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
Оказывается, это довольно просто.
/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/..."
немедленно устранило проблему.
P.S. (добавляю сюда на случай, если это поможет кому-то еще, кто пытается установить gobject-introspection) Решение также полезно при попытке установить gobject-introspection, потому что оно вызывает ldd
библиотеки разрешения.
Сообщение об ошибке, которое я получил, было следующим:ERROR: can't resolve libraries to shared libraries: gobject-2.0, glib-2.0