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