How to view symbols in object files?
Asked Answered
W

5

110

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

Wally answered 7/10, 2010 at 10:55 Comment(8)
nm is exactly what you'd use. Can you explain how it doesn't work for you ?Bankbook
It says : nm: Lib1.o: File format not recognizedWally
@nakiya: Run file Lib1.o and tell us what the output is.Smother
I built the object file straight from a header where the implementation was. Does that have anything to do with this?Wally
@DarkDust: How to run an object file?Wally
@Wally You can't run an .o file. And if you compile a header file you produce precompiled headers with recent gcc versions, not object files. You should compile .cpp files not header files.Bankbook
@nakiya: You cannot run it, you should really type the text "file Lib1.o" in your shell. The tool called file tells you the file type of Lib1.o, that is whether it really is an object file. I doubt it.Smother
Yep. :D. It says it's a precompiled header. I recompiled with implementation in a cpp file.Wally
S
129

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.

Smother answered 7/10, 2010 at 11:5 Comment(2)
I tried ObjDump also. Same result : objdump: Lib1.o: File format not recognizedWally
try objdump -t Lib1.oMacintosh
L
17

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.

Liddie answered 7/10, 2010 at 11:35 Comment(0)
A
8

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

Adalai answered 30/12, 2016 at 2:20 Comment(0)
P
4

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

nm
Peh answered 7/10, 2010 at 10:58 Comment(2)
The OP stated directly that he cannot use nm.Mingmingche
@Mingmingche 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.Smallwood
K
4

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);
}
Kriskrischer answered 29/9, 2018 at 1:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.