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,

Другие вопросы по тегам