查看函数和所在的行号

2023-10-27

查看Linux下*.a库文件中文件、函数、变量等情况 

  (2013-02-24 16:11:02)
   
在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包

含哪些文件、函数、变量:

        1. 查看文件:ar -t *.a

        2. 查看函数、变量:nm *.a

 

 

功能

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查看函数和所在的行号 的相关文章

  • gnu binutils

    The GNU Binutils are a collection of binary tools The main ones are ld the GNU linker as the GNU assembler But they also
  • C++动态分配指针数组

    C 动态分配指针数组 C Primer 4 34练习要求将存在vector
  • 查看函数和所在的行号

    查看Linux下 a库文件中文件 函数 变量等情况 2013 02 24 16 11 02 转载 在Linux 下经常需要链接一些 a的库文件 那怎么查看这些 a 中包 含哪些文件 函数 变量 1 查看文件 ar t a 2 查看函数 变量
  • c++ scalar 标量类型

    What is a scalar Object in C up vote 15 down vote favorite 11 As far as I understand it fundamental types are Scalar and
  • nm 命令显示

    用途 显示关于对象文件 可执行文件以及对象文件库里的符号信息 语法 nm A C X 32 64 32 64 f h l p r T v B P e g u d o x t Format File 描述 nm 命令显示关于指定 File 中
  • stl_func STT_FILE

    http lxr free electrons com source tools perf util symbol elf c L810 http lxr free electrons com source tools perf util
  • Binutils-2.23.2

    http lamp linux gov cn Linux LFS 6 2 chapter06 binutils html http davidgao github io LFSCN chapter06 binutils html Linux
  • C语言指针转换为intptr_t类型

    随笔 155 文章 2 评论 342 C语言指针转换为intptr t类型 1 前言 今天在看代码时 发现将之一个指针赋值给一个intptr t类型的变量 由于之前没有见过intptr t这样数据类型 凭感觉认为intptr t是int类型
  • binutils internal struct

    http fossies org dox binutils 2 23 2 structelf internal sym html dl iterate phdr REPAIR RAX inline hook
  • ELF动态加载器符号查找排序

    解析动态重定位时符号查找的搜索顺序是什么 当解析共享库的符号时 加载程序首先在 主可执行文件 中搜索 以让主可执行文件覆盖定义 还是什么 根据我的理解 每个可执行对象都有自己的 查找范围 主可执行文件通常是 全局 查找范围中的第一个对象 这
  • 使用 Linux binutils 设置 ELF 映像基地址的优雅方法?

    对于个人项目 我需要编写一个在非默认内存地址加载的可执行文件 从这个问题 我知道我可以设置 ELF 的入口地址并手动修改节地址 以便可执行文件有效地基于我选择的某个地址 然而 答案表明 只有当我不进行 glibc 初始化 这个项目需要它 时
  • Binutils LD 创建巨大文件

    我正在尝试创建尽可能小的 ELF 我创建了一个像这样的测试文件 NASM 语法 SECTION text dd 0xdeadbeef 使用此链接描述文件 SECTIONS text text 然后我检查了平面二进制文件的大小 并通过两种方式
  • gnu ld/gdb:单独的调试文件。当有太多调试信息需要链接时如何生成调试文件?

    现在有gdb and binutils支持将调试信息与要调试的二进制文件分开 描述这一点的文档可以在以下位置找到 gdb 单独的调试文件 http sourceware org gdb onlinedocs gdb Separate Deb
  • 为什么 GNU ld 在链接可执行文件和共享对象时解析符号的方式不同?

    我有一段简单的 C 代码 看起来像这样 include
  • 隐藏链接到 .so 文件的第 3 方 .a 文件中的符号

    我正在构建一个共享 so 库 该库由多个 a 文件和调用它们的瘦 API 层组成 我只希望我的 API 和外部依赖项可见 因此我使用 GCC 提供的 隐藏 可见性构建代码 fvisibility hidden 然而 其中一个库是专有的第三方
  • 是否可以将 MIPS 寄存器名称与 GAS(GNU 汇编器)一起使用?

    如果我使用寄存器名称 我会得到 Error illegal operands add t0 zero zero 如果我使用寄存器号 8代替 t0 and 0代替 zero 有用 我使用的是 binutils 2 17 GNU 汇编器不直接支
  • 无法编译:节文本中无法识别重定位 0x2a

    编译 make 时我收到一条错误消息 make g fopenmp o lang test main o I include Lheader I include L lib llmi lblas lboost regex lpthread
  • 为什么 GNU binutils 和 GDB 合并为一个包?

    https sourceware org git gitweb cgi p binutils gdb git https sourceware org git gitweb cgi p binutils gdb git 尤其是请参阅tags
  • 如何查看 Ubuntu 上的 Binutils 版本?

    我已经搜索过 但没有找到一个选项来告诉我我的 Ubuntu 上有哪个版本的 binutils 或者至少我不知道如何解释它 gcc v 没有透露任何有关 binutils 的信息 ld v 告诉我GNU ld GNU Binutils for
  • GNU ld 是否有一个选项可以完全省略 -dynamic-linker (PT_INTERP)?

    我正在 Linux 上试验纯静态链接 PIE 可执行文件的概念 但遇到了以下问题 GNU binutils 链接器坚持在输出二进制文件中添加 PT INTERP 标头 pie被使用 即使也给出 static 有什么办法可以抑制这种行为吗 也

随机推荐

  • 数据库索引原理及优化

    转发内容 一 摘要 本文以MySQL数据库为研究对象 讨论与数据库索引相关的一些话题 特别需要说明的是 MySQL支持诸多存储引擎 而各种存储引擎对索引的支持也各不相同 因此MySQL数据库支持多种索引类型 如BTree索引 哈希索引 全文
  • Python实现红黑树的删除操作

    Python实现红黑树的删除操作 本专栏的上一篇文章使用Python实现了红黑树的插入操作 参考 https blog csdn net weixin 43790276 article details 106456969 本篇文章使用Pyt
  • STL模板简介

    STL是C 中的优秀作品 有了它的陪伴 许多底层的数据机构以及算法我们不需要自己写 可以直接用STL里面的 就相当于我们站在巨人的肩膀上 飞一般地向前进 一 什么是STL STL standard template library 标准模板
  • H5跳转微信小程序-成功案例(VUE)(踩坑无数)

    这里写自定义目录标题 准备工作 根据官方提供的资料需准备以下几点 1 已认证的服务号 2 绑定JS接口安全域名 在微信公众平台设置 3 IP白名单 在微信公众平台设置 4 将小程序和H5公众号进行关联 在微信公众平台设置 5 页面path和
  • paramiko 无法实例化 transport

    背景 Paramiko is a pure Python 1 2 7 3 4 implementation of the SSHv2 protocol 2 providing both client and server functiona
  • python信号处理算法库_语音信号处理之时域分析-音高追踪及其Python实现

    1 概述 在音高及其Python实现一文 中 我们使用了简单的 观察法 来计算音高 这并不太难 但这并不有好而且费时费力 那么我们就想 如何通过分析和计算 使用算法来自动计算音高呢 用算法让计算机自动抓取音高的过程 称为音高追踪 Pitch
  • Flex 布局教程:语法篇

    网页布局 layout 是 CSS 的一个重点应用 布局的传统解决方案 基于盒状模型 依赖 display 属性 position属性 float属性 它对于那些特殊布局非常不方便 比如 垂直居中就不容易实现 2009年 W3C 提出了一种
  • Glog 使用

    原文链接 glog使用
  • Java复习-26-枚举

    枚举 替换多例设计 目的 使用场景 不用也没啥 定义一个描述性别的类 那么该对象只有两个 男 女 或者描述颜色基色的类 可以使用 红色 绿色 蓝色 功能 用于定义有限个数对象的一种结构 多例设计进化版 方法 enum 关键字 提供有enum
  • 从码云上克隆代码到IDEA及项目启动

    码云版本库地址复制 输登录代码库系统 找到 版本库 点击 版本库地址 下拉列表 选中 http zjs 190 100 21 10 1001 r aqjg extern project git 版本库地址复制 如果不是首次clone项目可直
  • 头歌答案Python,001

    金宝 答案在这里 自己抄 1 第一关 计算机 num 1 int input 请输入第一个数 print num 1 num 2 int input 请输入第二个数 print num 2 alg input 请选择要执行的运算符 prin
  • 单测mock和stub

    A variety of different terms are used to refer to these custom objects In an effort to clarify the vocabulary Gerard Mes
  • Design1.CMOS工艺OD门,传输门,三态门原理应用浅析

    纲要 OD门 传输门 三态门 1 OD门 i 概念 在CMOS电路中为了满足输出电平变换 吸收大负载电流以及实现线与连接等需要 需要将输出级电路结构改为漏极开路输出的MOS管 构成漏极开路输出 Open Drain Output 门电路 简
  • Android中的Selector的用法

    Android中的Selector主要是用来改变ListView和Button控件的默认背景 其使用方法可以按一下步骤来设计 以在mylist view xml为例 1 创建mylist view xml文件 首先在res目录下新建draw
  • 栈与队列小总结

    思维导图 一 栈 栈 一种数据结构 具有后进先出的特点 有两种实现方式 第一种实现方式就是用数组结构来实现 第二种方式就是用链表的方式来实现 但是由于使用数组的方式来实现栈会更加的好 所以在这里我们用数组的方式来实现栈 栈的实现 1 栈的结
  • 红蓝对抗--蓝队

    2019年参加护网行动的时候 想着是信安专业 可以去赚点零花钱 蓝队的工作 后面总结了一下护网行动和蓝队的一些工作重心 刚刚换电脑的时候翻出来了这个文章 只是个人拙见 大佬勿喷 文章目录 一 团队组建 二 梳理资产 三 风险梳理 四 减少攻
  • 面试求职经历及遇到的部分问题

    转眼间已经工作一年多了 最近想换个工作环境 就选择了跳槽 跳槽对我们程序猿来说并没什么稀奇 但这是我第一次跳槽 也颇感激动 哈哈 总的来说 这次找工作还是相对去年来说比较容易的 毕竟已经工作一年了嘛 记得去年的时候投20份简历也不一定会有面
  • Lesson 7 Edge I

    一 图像分割与不连续 图像分割 segmentation 的目的是把图像中的像素分组 每组像素和图像中的物体强相关 图像分割需要确定图像中的不连续处 不连续处 discontinuity 包括孤立点 线段和边缘 edge 我们首先介绍edg
  • eclipse的new server里tomcat7.0根本选不上解决方法

    创建Tomcat v7 0 Server 不能进行下一步 解决方法 1 退出 eclipse 2 到 工程目录下 metadata plugins org eclipse core runtime 3 把org eclipse wst se
  • 查看函数和所在的行号

    查看Linux下 a库文件中文件 函数 变量等情况 2013 02 24 16 11 02 转载 在Linux 下经常需要链接一些 a的库文件 那怎么查看这些 a 中包 含哪些文件 函数 变量 1 查看文件 ar t a 2 查看函数 变量