Подтвердить что ты не робот

Файл glibc: elf OS ABI недействителен

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

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

4b9b3361

Ответ 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.