Linux的nm查看动态和静态库中的符号

功能

列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等等。

 

使用

nm [option(s)] [file(s)]

有用的options:

  • -A 在每个符号信息的前面打印所在对象文件名称;
  • -C 输出demangle过了的符号名称;
  • -D 打印动态符号;
  • -l 使用对象文件中的调试信息打印出所在源文件及行号;
  • -n 按照地址/符号值来排序;
  • -u 打印出那些未定义的符号;

常见的符号类型:

  • A 该符号的值在今后的链接中将不再改变;
  • B 该符号放在BSS段中,通常是那些未初始化的全局变量;
  • D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
  • T 该符号放在代码段中,通常是那些全局非静态函数;
  • U 该符号未定义过,需要自其他对象文件中链接进来;
  • W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。

注意几点:

  • -C 总是适用于c++编译出来的对象文件。还记得c++中有重载么?为了区分重载函数,c++编译器会将函数返回值/参数等信息附加到函数名称中去形成一个mangle过的符号,那用这个选项列出符号的时候,做一个逆操作,输出那些原始的、我们可理解的符号名称。
  • 使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项,见 Linux:Gcc
  • 使用nm前,最好先用Linux:File查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。

 

举例

更详细的内容见man page。这里举例说明:

nm -u hello.o
显示hello.o 中的未定义符号,需要和其他对象文件进行链接.
nm -A /usr/lib/* 2>/dev/null | grep "T memset"

在 /usr/lib/ 目录下找出哪个库文件定义了memset函数. 

时间: 2024-07-28 23:32:25

Linux的nm查看动态和静态库中的符号的相关文章

linux pen-glGetTextureHandleNV在OpenGL哪个库中

问题描述 glGetTextureHandleNV在OpenGL哪个库中 在linux环境下,我已经包含了glew.h,但是代码中无法识别该函数, 查看了libGLEW.a文件,也没有包含该函数的符号,我想知道是不是还有其他头文件中有该函数,到底在哪个库中实现了? 解决方案 找一下__glewGetTextureHandleNV #define glGetTextureHandleNV GLEW_GET_FUN(__glewGetTextureHandleNV)

工具-linux 动态库中方法查看

问题描述 linux 动态库中方法查看 大神们,我想查看linux 动态库中方法的详细定义,问有啥方法或工具能否实现????? 解决方案 没有,基本上nm,objdump等只能看到函数名等.都被修饰了 解决方案二: 楼上正解.......................

linux 库中,这三个有什么不同

问题描述 linux 库中,这三个有什么不同 解决方案 版本不一样,你的图太小了,看不清别的. 解决方案二: 你可以ls -l一下. 有些是问的软链接,其实都指向一个文件. 解决方案三: 蓝绿色的是软链接,你可以使用ls -l看下软连接的库指向哪里,指向哪里就等价于哪个文件 解决方案四: 可以通过ls -la查看一下文件的全部属性,应该可以看到蓝色的两个文件指向了绿色的那个文件,就像上面的哥们解释的一样,蓝色的链接,绿色就是真正的文件,好比在windows下面的快捷方式和快捷方式指向的文件

预构建Linux映像在Windows Azure中部署多节点Hadoop群集

本文章由 http://www.aliyun.com/zixun/aggregation/13357.html">Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 随着基础结构服务(虚拟机和虚拟网络)近期在 Windows Azure 上正式发布,越来越多的企业工作负荷正在向公共云迁移,以利用云经济效益.规模和速度.我最近参与了其中一种企业工作负荷 - 云中的大数据.在此,我将与您分享一些提示和最佳做法. 该项目要求使用预构建 Linux 映像在 Windows

删除Access数词库中的空记录

access 删除数词库中的空记录 作者:淘特网 出处:淘特网 注:转载请注明出处 用零长度字符指示不存在数据 若要在 Microsoft Access 数据库中指示不存在数据,可以在"文本"或"备注"字段输入零长度字符串 (零长度字符串:不含字符的字符串.可以使用零长度字符串来表明您知道该字段没有值.输入零长度字符串的方法是键入两个彼此之间没有空格的双引号 (" ").).在连接到 Microsoft SQL Server 数据库的 Micro

SharePoint 2013文档库中PPT转换PDF

通过使用 PowerPoint Automation Services,可以从 PowerPoint 二进制文件格式 (.ppt) 和 PowerPoint Open XML 文件格式 (.pptx) 转换为其他格式.例如,您可能需要将一批 PowerPoint 97–2003 文件升级到 Open XML 演示文稿文件.您还可以在"编辑"菜单中创建自定义操作,以允许用户按需创建 PDF 版本的演示文稿. 一.效果演示: 1.新建一个ppt文档(office 2013,后缀pptx),

如何在Word 2013样式库中删除样式

在Word2013文档中,用户可以根据实际需要在样式库中添加或删除样式,操作步骤如下所述: 第1步,打开Word2013文档窗口,在"开始"功能区的"样式"分组中单击"其他"按钮,如图2013081003所示. 图2013081003 单击"其他"按钮 第2步,在打开的样式库中,右键单击需要删除的样式,并在打开的快捷菜单中选择"从样式库中删除"命令即可将该快速样式删除,如图2013081004所示. 图20

Win7系统查看字体库的技巧

  绝大多数人使用电脑无非是聊天.编辑文件,这些操作让大家对字体有了一定的认识,例如:宋体.繁体.楷体.黑体--同时,大家也知道在自己的电脑里并不是所有的字体都是这样的常用,还有一些字体比如:Batang.DFKai-SB等一系列用英文字母组成的,我们甚至从来没有用过这样的奇怪字体,但实际上用起来的效果和一些字体模式很雷同,所以与其保留着让我们眼花缭乱选字体,不如卸载他们节省内存和时间.想要卸载他们,就要用到字体库啦,但我么恩似乎只知道字体而不知道什么叫字体库,也不知道用什么方法打开字体库,下面

mysql-MySQL库中乱码怎么解决

问题描述 MySQL库中乱码怎么解决 我把MySQL中配置文件的格式更改了,model也注释了,数据库中的编码格式全部都调成一样的 为什么乱码还是没有解决,急急急,求大神给一些建议,谢谢了! 解决方案 mac下解决MySQL中文乱码的问题mac 解决MySQL中文乱码的问题解决MYSQL 中文乱码 解决方案二: 看一下这篇文章mysql中出现乱码的原因及其解决方法 解决方案三: 创建的数据库编码也一致吗? 解决方案四: 查看MySQL数据库编码 SHOW VARIABLES LIKE 'char