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

È stato utile?

Soluzione

Trovato una macro di registrazione / debug che è stato definisce dbg_char da 'dbg_ ## t'. fix è stato quello di renderlo statico. lezioni apprese:

  1. 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_"
  2. osx aveva ragione di lamentarsi
  3. 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.

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