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

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

8
задан Pascal Cuoq 7 January 2010 в 14:42
поделиться

1 ответ

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

4
ответ дан 6 December 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: