Почему в заголовке ELF общей библиотеки Linux указывается как OSABI?

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

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

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

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

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

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


person George Hawkins    schedule 07.01.2010    source источник


Ответы (1)


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

person Ronny Vindenes    schedule 07.01.2010