Perché l'intestazione ELF di una libreria condivisa dovrebbe specificare Linux come OSABI?

StackOverflow https://stackoverflow.com/questions/2020961

Domanda

Tutte le librerie standard condiviso sul mio sistema Linux (Fedora 9) specificano ELFOSABI_NONE (0) come loro OSABI.

Questo va bene -. Comunque ho ricevuto una libreria condivisa da un fornitore in cui l'OSABI data nell'intestazione ELF è ELFOSABI_LINUX (3)

Non suoni come un valore irragionevole per una libreria condivisa destinato ad un sistema Linux, tuttavia è un valore diverso da quello di tutte le mie altre librerie - e così quando cerco di aprire questa biblioteca, con dlopen (), da uno dei miei altre biblioteche questo non riesce con l'errore "file di ELF OS ABI non valido".

ho compilato il programma di utilità di FreeBSD brandelf. c e lo usò per cambiare il tipo OSABI a 0 e ora la libreria sembra per giocare bene con tutto il resto.

Mi chiedo solo - perché pensi che questa libreria è contrassegnato come ELFOSABI_LINUX? Sto indovinando forse Attraversano compilato su un altro sistema e indicato alcune gcc che ha causato questo valore deve essere impostato nell'intestazione ELF? Ho cercato di ottenere qualcosa di simile, ma non sono riuscito a determinare la bandiera gcc appropriato o bandiere.

Mi piacerebbe sapere che cosa la probabile causa è da questo particolare il fornitore non farà nulla senza un sacco di lato azienda e mi piacerebbe essere in grado di dire "probabilmente stai facendo X, ma questo significa che dobbiamo modificare le librerie dopo prendiamo la consegna di loro".

È stato utile?

Soluzione

Forse il venditore è compilazione croce su FreeBSD o utilizzando un sistema molto recente Fedora dove tutto utilizzando STT_GNU_IFUNC saranno contrassegnati come ELFOSABI_LINUX. Se si sta tentando di usarlo su Linux non ci dovrebbero essere problemi con la modifica a ELFOSABI_NONE come avete fatto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top