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?

Foi útil?

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.

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