LD: Duplica simbolo _dbg_char
Domanda
Ottenere un errore di linker su OSX (nessun errore su Linux o FBSD per lo stesso codice):
ld: duplicate symbol _dbg_char in .libs/liboekernel_la-OEK_get.o and .libs/liboekernel_la-OEK.o
le 2 librerie elencate nel l'errore sono mie, ma il simbolo non è. C ++ conferma di selce '_dbg_char' è in entrambi i movimenti di liberazione, ma io non sono sicuro di come trovare da dove proviene.
trucchi, strategie, risposte definitive su come id _dbg_char sarebbe molto apprezzato.
progetto sta usando libtool / autotools e gcc 4.01
Soluzione
Trovato una macro di registrazione / debug che è stato definisce dbg_char da 'dbg_ ## t
'. fix è stato quello di renderlo statico. lezioni apprese:
- osx aggiunge un leader _ ai nomi simbolo. non è stato fino a quando ho incontrato nm su linux e ho visto lo stesso simbolo senza lo _ che ho pensato di cercare il codice di base per "
dbg_
" invece di "_dbg_
" - osx aveva ragione di lamentarsi
- ricco ironia che cut-e-incollare una macro di debug non ho comprendere appieno mi ha causato così tanti problemi
Altri suggerimenti
Si potrebbe voler controllare se entrambe le librerie #include
un file di intestazione che dichiara _dbg_char
ma manca la parola chiave extern
. Forse è #ifdef
'ED fuori per altre piattaforme in modo da colpire solo il problema su OS X.