这个 nm 输出是啥意思?
Posted
技术标签:
【中文标题】这个 nm 输出是啥意思?【英文标题】:what does this nm output mean?这个 nm 输出是什么意思? 【发布时间】:2014-08-08 19:09:02 【问题描述】:我有一个使用 g++ 构建的共享对象文件,如下所示。
g++ -shared -fPIC -lpthread -O1 -std=c++11 -c AOTelemetry.cpp -L /home -I /opt/java7/include/ -I /opt/java7/include/linux/ -lstdc++ -ldl -lcsfutil -lcsfthread -ldata -lservices -lserviceutil -levent -lhealth -o AOTelemetry.so
在目标文件上运行 nm 实用程序时,会将大量内存地址引用(我认为它们是这样的)显示为零。这是什么意思?
0000000000000000 V typeinfo name for std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>
0000000000000000 V vtable for ProcessJob
0000000000000000 V vtable for NativePlugin
0000000000000000 V vtable for AOTelemetryPlugin
0000000000000000 V vtable for Shutdown
0000000000000000 V vtable for BdtBuffer
U vtable for __cxxabiv1::__class_type_info
U vtable for __cxxabiv1::__si_class_type_info
0000000000000000 V vtable for std::_Sp_counted_ptr<ProcessJob*, (__gnu_cxx::_Lock_policy)2>
0000000000000000 V vtable for std::_Sp_counted_ptr<Shutdown*, (__gnu_cxx::_Lock_policy)2>
0000000000000000 V vtable for std::_Sp_counted_ptr<BdtBuffer*, (__gnu_cxx::_Lock_policy)2>
0000000000000000 V vtable for std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>
【问题讨论】:
你看到man pages for nm了吗? 是的,我做到了。它只是说符号类型 V 是一个弱对象。 【参考方案1】:我建议阅读有关 nm
的手册页或唯一的教程/文档。
来自this教程:
nm 命令提供有关在目标文件或可执行文件中使用的符号的信息。 “nm”命令提供的默认信息是:
符号的虚拟地址 描述符号类型的字符。如果字符是小写,则符号是本地的,但如果字符是大写的,则符号是外部的 符号名称
【讨论】:
以上是关于这个 nm 输出是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
Boost.Exception 符号出现在“nm”输出中是啥意思?它们会导致 ODR 违规吗?
如何阅读 nm 命令:nm 选项 -T 和 -U(未定义)是啥意思?