Simbolo non definito ___gxx_personality_v0 sul collegamento
Domanda
Ho ottenuto questo edificio simbolo indefinito con questa riga di comando:
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
test.cpp è semplice e dovrebbe funzionare bene. Qual è il problema?
Soluzione
Usa
g++ test.cpp
invece, poiché si tratta di codice c ++.
Oppure, se veramente vuoi usare gcc
, aggiungi -lstdc ++
alla riga di comando, in questo modo:
gcc test.cpp -lstdc++
L'esecuzione di md5
su a.out
prodotto in ogni scenario mostra che si tratta dello stesso output.
Ma, sì, g ++
probabilmente rende il tuo mondo un posto più semplice.
Altri suggerimenti
L'estensione .cpp
fa sì che gcc
compili il tuo file come file C ++. (Vedi Documenti GCC .)
Prova a compilare lo stesso file, ma rinominalo per avere un'estensione .c
:
mv test.cpp
gcc test.c
In alternativa, puoi specificare esplicitamente la lingua passando -x c
al compilatore:
gcc -x c -c test.cpp -o test.o
Se esegui nm test.o
su queste versioni in linguaggio C, noterai che ___gxx_personality_v0
non è elencato come simbolo.
(E se si esegue lo stesso comando su un file oggetto generato con gcc -c test.cpp -o test.o
, è presente il simbolo ___gxx_personality_v0
.)
Nel caso in cui qualcuno abbia lo stesso problema: l'estensione del file dovrebbe essere un .c
non un .C
(gcc fa distinzione tra maiuscole e minuscole).
Aveva lo stesso problema, ma una soluzione diversa:
Codice C ++ nella libreria statica collegato e referenziato da un file .m. Rinominare il file .m in .mm risolto il problema.