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

Foi útil?

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:

  1. 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_"
  2. OSX estava certo em reclamar
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top