功能

列出.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函数.

转载于:https://www.cnblogs.com/cgc0415/p/7103026.html

【Linux命令】nm 查看动态库和静态库中的符号相关推荐

  1. linux命令之查看动态库符号-nm

    在调用动态库的时候,经常出现由于动态库接口修改或者版本不匹配导致调用动态库找不到函数接口符号的情况. 原因可能有如下几种: 1.由于c++动态库编译没有加extern c导致函数编译时加了c++的前缀 ...

  2. linux命令之查看动态库中字符串-strings

    strings命令是在对象文件或者二进制文件中查找可打印的字符串,有很多的用途,例如一个用法就是在编译的so中定义字符串常量作为动态库的版本号,然后就可以使用strings+grep 组合命令查看当前 ...

  3. Linux中的动态库和静态库(.a/.la/.so/.o)

    为什么80%的码农都做不了架构师?>>>    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序 ...

  4. gcc g++ Linux下动态库_静态库

    关于Unix静态库和动态库的分析 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在 ...

  5. Linux 动态库和静态库

    From:http://blog.csdn.net/u010977122/article/details/52958330 From:http://blog.163.com/xychenbaihu@y ...

  6. Linux库概念及相关编程(动态库、静态库、环境变量)

    分文件编程: 好处:分模块编程思想,功能和责任划分清楚便与调试,main函数简洁,代码易于阅读. 编程时头文件有的是使用<>这个符号括起来的,有的是" "使用的是双引号 ...

  7. linux系统中 库分为静态库和,Linux系统中“动态库”和“静态库”那点事儿-【经典好文】...

    今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在linux操作系统中,普遍使用E ...

  8. Linux系统中动态库和静态库的区别

    Linux系统中"动态库"和"静态库"那点事儿 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源 ...

  9. Linux系统中的“动态库”和“静态库”

    Linux系统中的"动态库"和"静态库" 在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式.ELF(Executable a ...

  10. Linux系统中“动态库”和“静态库”那点事儿

    转自:https://blog.csdn.net/u010977122/article/details/52958330#commentBox 今天忙着编译库文件,中间遇到不少问题,看到这篇文章不错, ...

最新文章

  1. “{”: 未找到匹配令牌
  2. Redis配置主从数据,实现主从库之间数据同步
  3. 服务器优化:Tomcat、JVM性能调优笔记
  4. nashorn 性能_Nashorn简介
  5. ubuntu17.04之apt-get源
  6. leetcode python3 简单题141. Linked List Cycle
  7. oracle中的sql文本类型,Oracle数据库的空间数据类型
  8. 结对第一次—原型设计
  9. Python yolo 神经网络实现视频中的行人车辆检测计数(车流量统计)YOLO多目标跟踪与计数
  10. 热敏打印机排版—了解打印机的基础知识
  11. 股基交易额市场份额(VMS)
  12. CCNA上机实验_19-PPP
  13. 单片机c语言设计奥运五环,用C语言程序来设计奥运五环图案
  14. python 程序运行计时 动态_python中time库clock 使用Python,实现程序运行计时的数码管表示...
  15. 使用adb备份安卓应用apk文件
  16. 【数字信号】基于DTMF双音多频电话拨号仿真(电话号码归属地匹配功附matlab代码...
  17. 作业:会员制营销| Email营销(山姆公司培训方案)
  18. 江苏移动千里眼 v2.1.12
  19. win7打开仅计算机黑屏,win7系统打开计算机黑屏的解决方法
  20. C Primer Plus 第六版 章节课后编程练习答案(下)(缘更)

热门文章

  1. python 读取中文文件名/中文路径
  2. php mysql 代理_让PHP像C罗一样操作MySQL之ProxySQL
  3. mysql如何添加用户_如何创建新用户和授予MySQL中的权限
  4. dataframe修改数据_利用Python进行数据分析(语法篇)
  5. 深度学习入门笔记:Day-10
  6. PLSQL没有链接为解决办法
  7. 95-30-050-java.util-LinkedHashMap
  8. 95-136-070-源码-Operator-扩展有状态的operators
  9. chrome 控制台 base64加密解密
  10. maven的基本命令