我该如何查看.o文件中的符号?nm命令对我没用。我使用g++/linux。
你可以使用强大的objdump
代替nm
。有关详细信息,请参见man页面。尝试 objdump -t myfile
或objdump -T myfile
。使用-C
标志,您还可以解除像nm
一样的C++名称修饰。
objdump: Lib1.o: 文件格式无法识别
。 - nakiyaobjdump -t Lib1.o
。 - mustafa您是否使用了另一个平台的交叉编译器?如果是,就需要使用相应的nm
或objdump
命令。
例如,如果您使用XXX-YYY-gcc
编译.o文件,则需要使用XXX-YYY-nm
或XXX-YYY-objdump
来处理文件。
nm your_obj_file.o | c++filt
有一个命令可以查看目标文件、库文件或可执行文件中包含哪些函数:
nm
nm
。 - ivan_pozdeevnm
完全满足了我的需求,所以我认为在这种情况下这是一个很好的答案。 - Newbytenm -C .o/lib/exe
,例如:xiongyu@ubuntu:~/tmp/build$ nm -C libfile1.a
file1.cpp.o:
0000000000000000 T f()
0000000000000000 W int fun<int>(int)
如果你只使用nm
,那么使用nm -C
会更易读。
xiongyu@ubuntu:~/tmp/build$ nm libfile1.a
file1.cpp.o:
0000000000000000 T _Z1fv
0000000000000000 W _Z3funIiET_S0_
我们可以看到这段文字不太易读。
下面是我的file1.cpp
文件的内容:
xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp
#include "head.h"
void f() {
int i = fun<int>(42);
}
nm: Lib1.o: 文件格式无法识别
- nakiyafile Lib1.o
并告诉我们输出结果是什么。 - DarkDustfile Lib1.o
"。叫做file
的工具告诉你Lib1.o的文件类型,即它是否真的是一个目标文件。我怀疑它不是。 - DarkDust