2009-08-06 11 views
8

Ho problemi a collegare una libreria condivisa usando gcc 3.2.3 con binutils 2.18. Quando provo a collegare la libreria ottengo il seguente errore:Aiuto con linker failer: .gnu.linkonce.t

.gnu.linkonce.t _... fa riferimento nella sezione .rodata: definito nella sezione .gnu.linkonce.t scartato ...

I Ho fatto una buona dose di googling su questo e la maggior parte dei posti sembra indicare che si tratta di una regressione introdotta in binutils 2.17 e successivamente fissata in 2.18.50, ma ero curioso se qualcuno sapesse se c'erano soluzioni alternative per il problema senza avere toccare binutils e gcc.

Grazie.

risposta

6

Questo si è rivelato uno strano risultato in cui il sistema non corrispondeva a gcc con un diverso binutils./usr/bin/gcc era in uso (3.2.3) e/usr/local/bin/ld veniva usato con esso a causa di/usr/local/bin davanti a/usr/bin nel percorso. Quando siamo passati in modo che/usr/bin fosse nella parte anteriore del percorso, è stato chiamato/usr/bin/ld appropriato (binutils 2.14) e questo sembra aver risolto il problema.

0

Questo errore è stato trovato ed è stato segnalato qui GCC bugzilla, una piccola testcase che si concentra sul bug è stata fornita nei commenti che ho trovato davvero utile non perdere tempo. Questo errore è stato risolto a partire da GCC 3.4.6.

Ho riscontrato questo problema durante l'utilizzo di GCC 3.3.1 con binutils 2.15.92 e binutils 2.17.50 ed entrambi non hanno funzionato. Quindi, per me chiaramente non era il mix delle versioni GCC e binutils che ha reso il problema.

Se è necessario utilizzare una versione precedente di GCC, è possibile utilizzare questa patch fornita da H.J. e procedere manualmente, quindi ricreare nuovamente il vecchio GCC.

Fix without COMDAT group

Fix with COMDAT group

Controllare le attachements nei link forniti che mostra il diff esatta per la correzione.

ho fatto io e testati e ha funzionato con successo, l'applicazione di patch GCC 3.3.1 con il primo fix "senza COMDAT", ricostruito e utilizzato con binutils 2.15.92 e binutils 2.17.50.