如何在.o 文件中查看符号? nm 对我来说不起作用。我使用 g + +/linux。
There is a command to take a look at which functions are included in an object file or library or executable:
nm
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.
objdump
objdump -t myfile
objdump -T myfile
-C
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.
XXX-YYY-gcc
XXX-YYY-nm
XXX-YYY-objdump
Just run: nm you_obj_file.o | c++filt
nm you_obj_file.o | c++filt
You can use nm -C .o/lib/exe, for example:
nm -C .o/lib/exe
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:
nm -C
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:
file1.cpp
xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp #include "head.h" void f() { int i = fun<int>(42); }