nm: "U" The symbol is undefined

bbazso picture bbazso · Feb 24, 2010 · Viewed 36.8k times · Source

When I nm on one of my libs:

nm libmylib.so

I get a line like this

             U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4

I checked the man page for nm and I got "U" The symbol is undefined. What does an undefined symbol really mean?

If it is really undefined, then why does nm report it at all?

Answer

Troubadour picture Troubadour · Feb 24, 2010

An undefined symbol is a symbol that the library uses but was not defined in any of the object files that went into creating the library.

Usually the symbol is defined in another library which also needs to be linked in to your application. Alternatively the symbol is undefined because you've forgotten to build the code that defines the symbol or you've forgotten to include the object file with that symbol into your library.

In your case it looks like a symbol from your implementation's C library so you would expect that to be undefined in your own library. It will be defined in your libc.so wherever that is, possibly /usr/lib.