glibc: elf file OS ABI неверен
Скачал и скомпилировал glibc-2.13. когда я пытаюсь запустить пример программы C, которая выполняет malloc(). Я получаю следующую ошибку elf file OS ABI invalid
Может кто-нибудь, пожалуйста, передайте мой любой указатель, полезный в решении этой проблемы. Обратите внимание, что моя версия ядра - linux-2.6.35.9
4 ответа
Проблема не в версии вашего ядра.
Загрузчик в вашей системе не поддерживает новый Linux
ABI. До недавнего времени бинарные файлы Linux ELF использовали System V
ABI. Недавно, в поддержку STT_GNU_IFUNC, Linux
ABI был добавлен. Вам необходимо обновить системную библиотеку C, чтобы иметь загрузчик, поддерживающий STT_GNU_IFUNC, а затем он также распознает объекты ELF с Linux
Тип ABI.
Посмотрите запись в блоге Дэйва Миллера на STT_GNU_IFUNC для Sparc, чтобы получить представление о том, что делает STT_GNU_IFUNC, если вам не все равно.
Если вы получите свои руки в загрузчике из более новой системы, вы, возможно, сможете заставить его работать, используя это. Но вам придется нести загрузчик, куда бы ни шла ваша программа. Вы можете либо скомпилировать вашу программу, чтобы использовать этот загрузчик, как описано здесь, либо скомпилировать вашу программу и исправить ее позже, используя patchelf, способом, подобным тому, что я упоминаю здесь. Я смог запустить программу, которая давала мне OS ABI invalid
ошибка в linux 2.6.18 (старше вашего) с ld-2.5.so, скопировав ld-2.15.so откуда-то еще.
ПРИМЕЧАНИЕ: НЕ перезаписывайте вашу систему ld*.so или ld-linux.;-/
Возможно, ваш glibc был построен с --enable-multiarch
флаг, который принудительно использовал ifunc и новый LINUX ABI
Из того, что я могу сказать, это то, что --enable-multiarch
это настройка по умолчанию, и вы должны отключить ее, установив --enable-multiarch=no
,