Símbolo no definido ___gxx_personality_v0 en el enlace

He estado obteniendo este edificio de símbolos sin definir con esta línea de comando:

$ gcc test.cpp Undefined symbols: "___gxx_personality_v0", referenced from: etc... 

test.cpp es simple y debe construir bien. ¿Cuál es el trato?

Utilizar

 g++ test.cpp 

en cambio, ya que este es el código de C ++.


O bien, si realmente quieres usar gcc , agrega -lstdc++ a la línea de comando, así:

 gcc test.cpp -lstdc++ 

Ejecutando md5 contra el a.out producido en cada escenario muestra que es el mismo resultado.

Pero, sí, g++ probablemente haga que tu mundo sea un lugar más simple.

La extensión .cpp hace que gcc compile su archivo como un archivo C ++. (Ver los documentos de GCC )

Intente comstackr el mismo archivo, pero renómbrelo para tener una extensión .c :

 mv test.cpp gcc test.c 

Alternativamente, puede especificar explícitamente el idioma pasando -xc al comstackdor:

 gcc -xc -c test.cpp -o test.o 

Si ejecuta nm test.o en estas versiones de lenguaje C, notará que ___gxx_personality_v0 no figura como un símbolo.
(Y si ejecuta el mismo comando en un archivo de objeto generado con gcc -c test.cpp -o test.o , el símbolo ___gxx_personality_v0 está presente).

En caso de que alguien tenga el mismo problema que yo: la extensión del archivo debe ser .c no a .C (gcc distingue entre mayúsculas y minúsculas).

Tenía el mismo problema, pero una solución diferente:

Código de C ++ en la biblioteca estática que se vincula, y que hace referencia a un archivo .m. Cambiar el nombre del archivo .m a .mm solucionó el problema.