2011-05-18 19 views
64

Duplicar posible:
Undefined Symbol ___gxx_personality_v0 on linkError de enlace "referencia indefinida a` __gxx_personality_v0' " y g ++

Tengo un problema con el siguiente programa.

// fkt.cpp 

#include "fkt.h" 

int add2(int a, int b) 
{ 
    return a+b; 
} 

Y el encabezado:

// fkt.h 

int add2(int a, int b); 

Ahora puedo compilar esto con:

g++ -c fkt.cpp 

Ahora corro nm y sale:

00000000 T _Z6add2ii 
     U __gxx_personality_v0 

Cuando quiero usar la función en cualquier lugar que obtenga:

(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' 

¿Cómo puedo resolver este problema? (Estoy usando Ubuntu Linux.)

+1

¿Podemos ver la línea de comando que está utilizando para vincular? (Debería usar 'g ++' para hacer los enlaces también si no lo está haciendo todavía). – Rup

+0

¿Ha intentado 'g ++ ftk.cpp -o ftk'? – karlphillip

+0

junté el enlace con ghc (usando FFI) – develhevel

Respuesta

94

Si g++ todavía da error Intente con:

g++ file.c -lstdc++ 

Mire esta publicación: What is __gxx_personality_v0 for?

Asegúrese de que -lstdc++ se encuentre al final del comando. Si lo coloca al principio (es decir, antes de file.c), aún puede obtener el mismo error.

+0

No tengo idea de lo que es -lstdC++ pero me ayudó a compilar la biblioteca .so para mi proyecto jni. Gracias – Hoto

+4

Vincula la biblioteca estándar cpp. – phoxis

+0

¿Estaba seguro de que llamaba a g ++ y no a gcc? - No debería tener que agregar -lstdC++ manualmente. –

56

Parece que usted está tratando de enlazar con su archivo de objeto resultante con gcc en lugar de g++:

Tenga en cuenta que los programas que utilizan objeto de C++ archivos deben estar siempre enlazado con g ++, para proporcionar las librerías apropiadas de C++ . El intento de vincular un archivo de objeto de C++ con el compilador de C gcc hará "referencia indefinida" errores para C++ estándar biblioteca funciones:

$ g++ -Wall -c hello.cc 
$ gcc hello.o  (should use g++) 
hello.o: In function `main': 
hello.o(.text+0x1b): undefined reference to `std::cout' 
..... 
hello.o(.eh_frame+0x11): 
    undefined reference to `__gxx_personality_v0' 

Fuente: An Introduction to GCC - for the GNU compilers gcc and g++

+0

Me sucedió al usar [distcc] (https : //github.com/distcc/distcc/blob/master/README.md), ya que de forma predeterminada usa gcc, no g ++. La solución es especificar el compilador 'distcc g ++ [...]' – jotrocken

+0

añadiendo -fno-threadsafe-static resuelto el problema para mí, cuando se utiliza un Arduino Sketch. – Soundararajan

Cuestiones relacionadas