Все стандартные общие библиотеки в моей системе 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, но это означает, что мы должны измените ваши библиотеки после того, как мы их доставим ".