2010-02-24 29 views
37

Cuando nm en una de mis librerías:nm: "U" El símbolo no está definido

nm libmylib.so

consigo una línea como esta

   U [email protected]@GLIBCXX_3.4 

he comprobado el hombre página para nm y obtuve "U" El símbolo no está definido. ¿Qué significa realmente un símbolo indefinido?

Si es realmente indefinido, entonces ¿por qué nm lo informa en absoluto?

+7

como un aparte, nm --demangle es bastante útil para C++ hace que los símbolos más amigable –

Respuesta

33

Un símbolo indefinido es un símbolo que la biblioteca utiliza, pero no se definió en ninguno de los archivos de objeto que se utilizaron para crear la biblioteca.

Por lo general, el símbolo se define en otra biblioteca que también debe estar vinculada a su aplicación. Alternativamente, el símbolo no está definido porque se olvidó de crear el código que define el símbolo o porque olvidó incluir el archivo objeto con ese símbolo en su biblioteca.

En su caso, parece un símbolo de la biblioteca C de su implementación, por lo que es de esperar que no esté definido en su propia biblioteca. Se definirá en tu libc.so donde sea que esté, posiblemente/usr/lib.

+0

Parece que un símbolo de libstdC++, en realidad, pero sí, era de esperar que al estar previsto para usted. – ephemient

+0

@ephemient: Woops, me perdí el XX al final :) Gracias. – Troubadour

0

Significa que la biblioteca hace referencia a ese símbolo (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage en este caso?) Pero que no lo define; se supone que alguna parte del programa que lo vincule, o alguna otra biblioteca, debe hacer eso. Si quiso definirlo en su biblioteca, significa que no vinculó el archivo objeto con la definición de ese símbolo con el resto del código de la biblioteca.

-1

Creo que significa exactamente eso: indefinido en este objeto. Algunos símbolos se evalúan en tiempo de ejecución; este es probable que sea uno de ellos.

0

desciframiento Esto podría hacerse así:

  U [email protected]@GLIBCXX_3.4 

Medios:

U->>> in your library its undefined 

lo que es indefinido?

 _ZNSs4_Rep20_S_empty_rep_storageE 

Donde es probable que lo encuentre?

 GLIBCXX_3.4 
Cuestiones relacionadas