Todas las bibliotecas compartidas estándar en mi sistema Linux (Fedora 9) especifican ELFOSABI_NONE (0) como su OSABI.¿Por qué el encabezado ELF de una biblioteca compartida especificaría Linux como OSABI?
Esto está bien; sin embargo, he recibido una biblioteca compartida de un proveedor donde el OSABI dado en el encabezado ELF es ELFOSABI_LINUX (3).
Esto no sonido como un valor razonable para una biblioteca compartida destinada a un sistema Linux, sin embargo, es un valor diferente a la de todos mis otras bibliotecas - y así, cuando intento abrir esta biblioteca, con dlopen(), de una de mis otras bibliotecas esto falla con el error "ELF file OS ABI invalid".
compilé la utilidad de FreeBSD brandelf.c y lo utilizó para cambiar el tipo de OSABI a 0 y ahora la biblioteca parece jugar bien con todo lo demás.
Me pregunto, ¿por qué crees que esta biblioteca está marcada como ELFOSABI_LINUX? Supongo que tal vez compilan cruzados en otro sistema y especificaron alguna bandera gcc que hizo que este valor se establezca en el encabezado ELF. Traté de lograr algo similar, pero no pude determinar la bandera o banderas gcc apropiadas.
Me gustaría saber cuál es la causa probable ya que este proveedor en particular no hará nada sin mucha mano y me gustaría poder decir "probablemente estés haciendo X pero esto significa que tenemos para modificar sus bibliotecas después de recibirlas ".