Совместно использованные библиотеки всего стандарта по моей системе Linux (Fedora 9) указывают ELFOSABI_NONE (0) как их OSABI.
Это прекрасно - однако я получил общую библиотеку от поставщика, где OSABI, данный в заголовке ELF, является ELFOSABI_LINUX (3).
Это не походит на неблагоразумное значение для общей библиотеки, предназначенной для системы Linux, однако это - другое значение той из всех моих других библиотек - и поэтому когда я пытаюсь открыть эту библиотеку с dlopen (), из одной из моих других библиотек это приводит к сбою с ошибкой "файл ELF ОС недопустимый ABI".
Я скомпилировал утилиту FreeBSD brandelf.c и использовал ее для изменения типа OSABI на 0, и теперь библиотека, кажется, играет прекрасный со всем остальным.
Я просто задаюсь вопросом - почему Вы думаете, что эта библиотека отмечена как ELFOSABI_LINUX? Я предполагаю, возможно, что они пересекают скомпилированный в другой системе и указали некоторый флаг gcc, который заставил это значение быть установленным в заголовок ELF? Я пытался достигнуть чего-то подобного, но не мог определить соответствующий флаг gcc или флаги.
Я хотел бы знать то, чем состоит в том вероятная причина, поскольку эта конкретная привычка поставщика делает что-либо без большого ручного содержания, и я хотел бы смочь сказать, что "Вы, вероятно, делаете X, но это означает, что мы должны изменить Ваши библиотеки после того, как мы берем доставку их".
Возможно, производитель занимается кросс-компиляцией на FreeBSD или использует совсем новую систему Fedora, где всё, что использует STT_GNU_IFUNC, будет помечено как ELFOSABI_LINUX. Если вы пытаетесь использовать его под Linux, то не должно быть проблем с его заменой на ELFOSABI_NONE, как это было сделано.