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