LD: símbolo duplicado _dbg_char
Pergunta
Obtendo um erro de vinculador no OSX (sem erros no Linux ou FBSD para o mesmo código):
ld: duplicate symbol _dbg_char in .libs/liboekernel_la-OEK_get.o and .libs/liboekernel_la-OEK.o
Os 2 libs listados no erro são meus, mas o símbolo não é. O C ++ Flint confirma '_dbg_char' está nas duas libs, mas não tenho certeza de como encontrar de onde vem.
Truques, estratégias, respostas diretas sobre como identificar _dbg_char seriam muito apreciadas.
O Project está usando o Libtool/AutoTools e o GCC 4.01
Solução
Encontrou uma macro de log / depuração que estava definindo dbg_char por 'dbg_ ## t
'. A correção era torná -lo estático. lições aprendidas:
- OSX adiciona um líder _ aos nomes de símbolos. Não foi até eu correr NM no Linux e vi o mesmo símbolo sem a liderança que pensei em pesquisar na base de código "
dbg_
" ao invés de "_dbg_
" - OSX estava certo em reclamar
- ironia rica que cortar e colar uma macro depure que eu não entendi completamente me causou tantos problemas
Outras dicas
Você pode querer verificar se as duas libs #include
um arquivo de cabeçalho que declare _dbg_char
mas sinto falta do extern
palavra -chave. Talvez isso seja #ifdef
Para outras plataformas, então você só atingiu esse problema no OS X.