glibc: elf file OS ABI неверен - PullRequest
       50

glibc: elf file OS ABI неверен

21 голосов
/ 04 октября 2011

скачал и скомпилировал glibc-2.13. когда я пытаюсь запустить пример программы C, которая выполняет malloc (). Я получаю следующую ошибку elf file OS ABI invalid

Может кто-нибудь передать мой указатель, помогающий решить эту проблему. Обратите внимание, что моя версия ядра - linux-2.6.35.9

Ответы [ 4 ]

32 голосов
/ 04 октября 2011

Проблема не в версии вашего ядра.

Загрузчик в вашей системе не поддерживает новый Linux ABI.До недавнего времени в двоичных файлах Linux ELF использовался ABI System V.Недавно в поддержку STT_GNU_IFUNC был добавлен Linux ABI.Вам необходимо обновить библиотеку system C, чтобы иметь загрузчик, поддерживающий STT_GNU_IFUNC, а затем он также распознает объекты ELF с типом Linux ABI.

См. DaveЗапись в блоге Миллера на STT_GNU_IFUNC для Sparc (в архиве) , чтобы получить представление о том, что делает STT_GNU_IFUNC, если вам не все равно.

3 голосов
/ 07 февраля 2018

Если вы получите руки в загрузчик из более новой системы, возможно, вы сможете заставить его работать с этим.Но вам придется нести загрузчик, куда бы ни шла ваша программа.Вы можете либо скомпилировать вашу программу, чтобы использовать этот загрузчик, как объяснено здесь , либо скомпилировать вашу программу и позже исправить ее, используя patchelf, способом, подобным тому, что я упоминаю здесь .Я смог запустить программу, которая выдавала мне ошибку OS ABI invalid на linux 2.6.18 (старше вашего) с ld-2.5.so, скопировав ld-2.15.so откуда-то еще.

ПРИМЕЧАНИЕ: do NOT перезаписывает вашу систему ld * .so или ld-linux.; - /

3 голосов
/ 25 января 2012

Возможно, ваш glibc был собран с флагом --enable-multiarch, который принудительно использовал ifunc и новый LINUX ABI

1 голос
/ 14 апреля 2016

Из того, что я могу сказать, можно сказать, что --enable-multiarch является настройкой по умолчанию, и вы должны отключить ее, установив --enable-multiarch=no.

...