Почему заголовок ELF разделяемой библиотеки указывает Linux как OSABI? - PullRequest
8 голосов
/ 07 января 2010

Все стандартные общие библиотеки в моей системе Linux (Fedora 9) указывают ELFOSABI_NONE (0) в качестве своего OSABI.

Это нормально - однако я получил общую библиотеку от поставщика, в котором OSABI, указанный в заголовке ELF, - ELFOSABI_LINUX (3).

Это не звучит как неоправданное значение для разделяемой библиотеки, предназначенной для системы Linux, однако это значение отличается от значения для всех моих других библиотек - и поэтому, когда я пытаюсь открыть это библиотека, с dlopen (), из одной из моих других библиотек, это терпит неудачу с ошибкой "Недопустимый файл ABI файла ELF".

Я скомпилировал утилиту FreeBSD brandelf.c и использовал ее, чтобы изменить тип OSABI на 0, и теперь библиотека , похоже, прекрасно работает со всем остальным.

Мне просто интересно - как вы думаете, почему эта библиотека помечена как ELFOSABI_LINUX? Я предполагаю, может быть, они кросс-скомпилированы в другой системе и указали какой-то флаг gcc, который привел к установке этого значения в заголовок ELF? Я пытался добиться чего-то похожего, но не смог определить соответствующий флаг или флаги gcc.

Я хотел бы знать, какова вероятная причина того, что этот конкретный поставщик ничего не сделает без большой руки, и я бы хотел сказать: «Вы, вероятно, делаете X, но это означает, что мы должны измените ваши библиотеки после того, как мы их доставим ".

1 Ответ

4 голосов
/ 07 января 2010

Возможно, поставщик выполняет кросс-компиляцию на FreeBSD или использует новейшую систему Fedora, где все, что использует STT_GNU_IFUNC, будет помечено как ELFOSABI_LINUX. Если вы пытаетесь использовать его в Linux, не должно быть проблем с его заменой на ELFOSABI_NONE, как вы это сделали.

...