2010-02-24 19 views
37

Quando ho nm su una delle mie librerie:nm: "U" Il simbolo non è definito

nm libmylib.so

ottengo una linea come questa

   U [email protected]@GLIBCXX_3.4 

ho controllato l'uomo pagina per nm e ho ottenuto "U" Il simbolo non è definito. Cosa significa veramente un simbolo indefinito?

Se è davvero indefinito, allora perché nm lo segnala?

+7

come divagazione, nm --demangle è molto utile per C++ rende i simboli più amichevole –

risposta

33

Un simbolo non definito è un simbolo che la libreria utilizza ma non è stato definito in nessuno dei file oggetto della creazione della libreria.

In genere il simbolo è definito in un'altra libreria che deve anche essere collegata all'applicazione. In alternativa, il simbolo non è definito perché hai dimenticato di creare il codice che definisce il simbolo o hai dimenticato di includere il file oggetto con quel simbolo nella libreria.

Nel tuo caso sembra un simbolo dalla libreria C della tua implementazione, quindi ti aspetteresti che non sia definito nella tua libreria. Sarà definito in libc.so ovunque sia, possibilmente/usr/lib.

+0

Sembra un simbolo da libstdC++, in realtà, ma sì, ci si aspetta che da fornire per voi. – ephemient

+0

@ephemient: Woops, ho perso il XX alla fine :) Grazie. – Troubadour

0

Significa che la libreria fa riferimento a quel simbolo (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage in questo caso?) Ma che non lo definisce; parte del programma con cui lo si collega, o qualche altra libreria dovrebbe farlo. Se intendevi definirlo nella tua libreria, significa che non hai collegato il file oggetto con la definizione di quel simbolo con il resto del codice della libreria.

-1

Penso che significhi esattamente questo: indefinito in questo oggetto. Alcuni simboli vengono valutati in fase di esecuzione; questo è probabile che sia uno di loro.

0

decifrare questo potrebbe essere fatto in questo modo:

  U [email protected]@GLIBCXX_3.4 

Mezzi:

U->>> in your library its undefined 

cosa è indefinito?

 _ZNSs4_Rep20_S_empty_rep_storageE 

Dove è probabile trovarlo?

 GLIBCXX_3.4 
Problemi correlati