How to view symbols in object files?
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);
}
Comments
-
nakiya almost 2 years
How can I view symbols in a .o file? nm does not work for me. I use g++/linux.
-
nakiya over 13 yearsI tried ObjDump also. Same result :
objdump: Lib1.o: File format not recognized
-
mustafa about 10 yearstry
objdump -t Lib1.o
-
ivan_pozdeev over 8 yearsThe OP stated directly that he cannot use
nm
. -
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.