How to view symbols in object files?

100,019

Solution 1

Instead of nm, you can use the powerful objdump. See the man page for details. Try objdump -t myfile or objdump -T myfile. With the -C flag you can also demangle C++ names, like nm does.

Solution 2

Have you been using a cross-compiler for another platform? If so, you need to use the respective nm or objdump commmand.

For example, if you have used XXX-YYY-gcc to compile the .o file, you need to use XXX-YYY-nm or XXX-YYY-objdump to process the files.

Solution 3

There is a command to take a look at which functions are included in an object file or library or executable:

nm

Solution 4

Just run: nm you_obj_file.o | c++filt

Solution 5

You can use nm -C .o/lib/exe, for example:

xiongyu@ubuntu:~/tmp/build$ nm -C libfile1.a 

file1.cpp.o:
0000000000000000 T f()
0000000000000000 W int fun<int>(int)

using nm -C it will be more readable, if you just use nm:

xiongyu@ubuntu:~/tmp/build$ nm libfile1.a 

file1.cpp.o:
0000000000000000 T _Z1fv
0000000000000000 W _Z3funIiET_S0_

as we see it's not so readable.

Below is what my file1.cpp like:

xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp 
#include "head.h"
void f()  {
     int i = fun<int>(42);
}
Share:
100,019
nakiya
Author by

nakiya

Feeling lost in the land of gods

Updated on July 08, 2022

Comments

  • nakiya
    nakiya almost 2 years

    How can I view symbols in a .o file? nm does not work for me. I use g++/linux.

  • nakiya
    nakiya over 13 years
    I tried ObjDump also. Same result : objdump: Lib1.o: File format not recognized
  • mustafa
    mustafa about 10 years
    try objdump -t Lib1.o
  • ivan_pozdeev
    ivan_pozdeev over 8 years
    The OP stated directly that he cannot use nm.
  • Newbyte
    Newbyte over 2 years
    @ivan_pozdeev While that's true, I imagine some people (me at least) come to this question from just searching how to view symbols in object files, and in my case nm worked perfectly for my needs, so I think this is a fine answer given the circumstances.