Símbolo indefinido ___gxx_personality_v0 em ligação
Pergunta
Fui ficando este edifício símbolo indefinido com esta linha de comando:
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
test.cpp é simples e deve construir bem. Qual é o problema?
Solução
Use
g++ test.cpp
Em vez disso, uma vez que este é o código c ++.
Ou, se você realmente quiser usar gcc
, adicione -lstdc++
à linha de comando, assim:
gcc test.cpp -lstdc++
Running md5
contra o a.out
produzido sob cada cenário mostra que é a mesma saída.
Mas, sim, g++
provavelmente faz o seu mundo um lugar mais simples.
Outras dicas
As causas de extensão .cpp
gcc
para compilar seu arquivo como um arquivo C ++. (Veja o GCC docs .)
Tente compilar o mesmo arquivo, mas renomeá-lo para ter uma extensão .c
:
mv test.cpp
gcc test.c
Como alternativa, você pode especificar explicitamente a língua passando -x c
para o compilador:
gcc -x c -c test.cpp -o test.o
Se você executar nm test.o
nessas versões em língua C, você vai perceber que ___gxx_personality_v0
não está listado como um símbolo.
(E se você executar o mesmo comando em um arquivo objeto gerado com gcc -c test.cpp -o test.o
, o símbolo ___gxx_personality_v0
está presente.)
Apenas no caso de alguém tem o mesmo problema que eu:. A extensão do arquivo deve ser um .c
não um .C
(gcc é sensível a maiúsculas)
tive o mesmo problema, mas uma solução diferente:
código C ++ na biblioteca estática ficar ligados, e que está sendo referenciado por um arquivo .m. Renomear o arquivo .m para .mm corrigiu o problema.