首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux nm online

nm 是 Linux 系统中的一个命令行工具,用于显示目标文件(如编译后的二进制文件、库文件等)中的符号表信息。符号表包含了程序中定义和引用的函数、变量等的名称及其在内存中的地址。online 通常指的是在线模式,但在这里可能是指 nm 命令的使用场景之一,即在远程服务器上在线使用。

基础概念

符号表:在编译后的程序中,符号表记录了所有全局变量、函数等的名称及其对应的内存地址。这对于调试和链接过程非常重要。

nm 命令nm 是一个用于查看这些符号信息的工具。它可以列出目标文件中的符号,并显示它们的类型、值和名称。

相关优势

  1. 调试辅助:开发者可以通过 nm 查看程序的符号信息,帮助定位未定义的符号或重复定义的问题。
  2. 链接检查:在链接阶段,nm 可以用来检查库之间是否存在符号冲突。
  3. 动态分析:对于动态链接的库,nm 可以显示哪些符号是导出的,哪些是未导出的。

类型

nm 输出的符号类型包括:

  • A:该符号的值是绝对的,不允许在链接过程中改变。
  • Bb:该符号位于非初始化数据段(BSS)中。
  • Dd:该符号位于初始化数据段中。
  • Tt:该符号位于代码段(文本段)中。
  • U:该符号在当前文件中未定义,需要在其他文件中寻找。
  • Ww:弱符号。

应用场景

  • 库开发:开发者可以使用 nm 来检查库文件导出了哪些符号,以及是否有未定义的符号。
  • 程序调试:当程序出现链接错误时,可以使用 nm 来检查相关文件的符号表,找出问题所在。
  • 系统编程:在编写系统级软件时,了解符号表有助于更好地理解程序的结构和依赖关系。

遇到问题及解决方法

问题:使用 nm 查看符号表时,发现某些符号未定义(显示为 U)。

原因

  • 缺少相应的库文件。
  • 符号名称拼写错误或大小写不匹配。
  • 链接顺序不正确,导致依赖的符号在当前文件之后被解析。

解决方法

  1. 确保所有需要的库文件都已正确链接。
  2. 检查符号名称是否正确无误。
  3. 调整链接命令中的文件顺序,确保依赖项在前面。

示例代码

假设你有一个简单的 C 程序 main.c 和一个库文件 libexample.a,你可以这样使用 nm

代码语言:txt
复制
gcc -c main.c -o main.o
ar rcs libexample.a example.o
nm main.o
nm libexample.a

这将分别显示 main.olibexample.a 中的符号表信息。

总之,nm 是一个强大的工具,可以帮助开发者理解和解决与程序符号相关的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Oracle online系列(下):online indexbuild

点击上方蓝色字关注我们~ online indexbuild (online create或者rebuild index)是Oracle的一个极其常用的online操作,我们知道当创建索引或者重建索引没有加...本文将深入解析online indexbuild的工作原理。...在分析online indexbuild实现原理之前,先介绍一下indexbuild online与非online除了对表持有的TM锁级别不同之外的第二个比较大的区别,就是 indexbuild的执行计划不同...: indexbuild online只能使用全表扫描的方式; indexbuild非online,遵循CBO最小cost原则去选择执行计划,索引快速全扫描或者全表扫描。...由于online create index和online rebuild index在实现原理上基本一致,所以此次测试online rebuild index即可,测试环境选择的11.2.0.4,通过gdb

1.2K20
  • MySQL5.6的Online DDL不是真正的Online DDL

    Online DDL是从mysql5.6版本后引入的新功能,可以实现在线DDL操作不锁表。但是MySQL5.6的Online DDL不是真正的Online DDL,针对部分操作还是有局限性。...5.6之后的DDL处理方式: innodb_online_alter_log_max_size参数,默认为128M,超出范围会报错,所以处理大表的情况下需要调整这个值。...只有以下几类DDL操作不可以通过“Online”的方式进行:会影响其他DML操作 1、新加字符编码不同 2、更改列数据类型 3、删除主键 4、添加全文索引 所以5.6的Online DDL并不是真正的Online...DDL,如果想保证尽量不锁表,可以使用oak-online-alter-table和pt-online-schema-change等工具。...7、删除_old表 8、删除触发器 https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html#innodb-online-ddl-summary-grid

    1.9K60

    22nm 与 28nm 工艺的比较

    今天有朋友问我,22nm比28nm面积小多少。我说30%吧。他说,这么小?我说,30%都说多了。 ? 注:以下资料来自公开信息,仅做一个与28nm大致的比较。...2 与28nm相比,功耗更低,性能更强。还能通过正负偏压来进行功耗和性能的这种,但是采用偏压的话也不是没有成本。要有额外的IP来提供偏压所需的正负压。...HKMG, as well as performance equivalent to FinFET 与28nm相比,更大的优势在于功耗和性能。...end 综上, 相较于28nm,优势在于性能和功耗。面积的下降有限,约为20%。 mask层数减少。从成本上并不一定比28低,这个还要看能拿到的晶圆的价格。...如果采用22nm的话,工艺可能很难在提高。即使GF的12nmFDX研发成功,基本上这个工艺也就到头了。

    95921

    MySQL之Online DDL过程

    // MySQL之Online DDL过程 // 昨天内容中说了不同类型的DDL操作所采用的的执行方法,以及Online DDL对系统空间的依赖,今天我们说说Online DDL的操作过程,让大家有一个更加直观的认识...01 Online DDL的过程 从官方文档上看,online ddl操作的执行过程一般被分为3个阶段,如下: 阶段1:初始化阶段(准备阶段) 在初始化阶段,服务器将考虑存储引擎功能,语句中指定的操作以及用户指定的...02 Online DDL失败的情况 昨天的文章中说道,Online DDL失败的情况没有给出样例,但是官方文档上给出了可能失败的几种情况: 1、手工指定的algorithm和存储引擎中的算法出现冲突...的一些限制 1、使用lock=none模式的时候,不允许有外键约束,如果表中有外键的时候,使用Online DDL会出现一些问题 2、持有元数据锁的其他事务可能导致Online DDL阻塞,Online...√ 2、提前准备好故障报告,直接在线上进行变更,该方法纯属娱乐:)× 相关文章: 大表Online-DDL操作问题初探 MySQL之Online DDL再 有帮助的话还希望点下再看哈

    2.6K21

    Get.online:免费域名注册 - .online 域名首年免费附注册教程

    今天国外主机测评看到 .online 目前有免费域名可以注册,.online 是 radix 旗下的一个后缀。反正有免费域名,不要白不要,还是可以注册一个玩玩的,一年后续费不续费就看自己了。...Radix 已成功推出 7 个域名后缀,包括 .site、.online、.tech、.website、.press、.host、.space、.pw(专业网站)和 .http://in.net。...官方网站 点击直达Get.online 优惠码 BLOGOSPHERE (仅第一年免费注册,理论上来说更换账号可以无限注册.....)...注册教程 进入https://get.online/,搜索自己要注册的域名 注册账户 注册成功 注册后管理地址:https://manage.get.online 注意要验证邮箱,要不然会停止解析的

    21K11

    Online程序学习(一)

    一、创建Onlie程序 二、Online概览 Online程序:M类型程序 查询数据、录入、修改、删除等 Module Pool程序:以Module Pool形态进行业务流程的逻辑处理 Online...程序,强调用Online Transaction来处理业务流程进行过程 Screen 程序,主要使用Screen(及屏幕对象),并实现界面间Flow Logic(流逻辑) Online程序的主要对象...界面(Screen) SAP的屏幕开发 ABAP List代码实现(例:选择界面的创建) Report程序直接执行即可以显示查询界面或结果界面 Dialog Screen绘制:较复杂,界面丰富 Online...可以进行有效性检查 4、界面中可以设置独立的Menu Bar或Title,点选按钮或回车可以触发相应功能 功能实现位置:逻辑流中设定 Online程序不能被直接执行,必须通过事务代码,指定界面执行

    73900
    领券