tag personalized nombre name first etiquetas campaña c++ c gcc g++

c++ - personalized - merge tags first name



Símbolo no definido___gxx_personality_v0 en el enlace (4)

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).

He estado obteniendo este edificio de símbolos indefinido 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?


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

Intente compilar 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 compilador:

gcc -x c -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).


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.


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.