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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top