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.