> 环境与工具 > nm

nm: 查看对象文件符号列表

nm 命令用于显示编译后的对象文件、静态库、共享库等中的符号(函数、变量等)列表。通过此功能,可以帮助理解程序结构并用于调试。

概述

nm 分析对象文件内的符号表,输出每个符号的名称、类型、地址等信息。这对于诊断链接问题、检查库内容、分析代码优化等非常有用。

主要功能

  • 输出对象文件的符号列表
  • 识别符号类型(函数、变量、已定义、未定义等)
  • 提供符号地址和大小信息
  • 支持 C++ 名称解压

主要选项

nm 命令提供多种选项来过滤符号列表和控制输出格式。

符号过滤

输出格式

生成的命令:

请尝试组合命令。

描述:

`nm` 执行命令。

通过组合这些选项,您可以与 AI 一起虚拟地执行命令。

使用示例

通过示例了解使用 nm 命令查看对象文件符号信息的各种方法。

查看基本符号列表

gcc -c main.c -o main.o
nm main.o

以基本格式输出已编译的可执行文件或对象文件的所有符号。

仅查看未定义符号

nm -u main.o

仅输出未定义的符号,如未链接的外部函数或变量,这对于诊断链接问题非常有用。

C++ 符号解压

g++ -c my_class.cpp -o my_class.o
nm -C my_class.o

将 C++ 对象文件中复杂的符号名称转换为人类可读的格式进行输出。

显示符号大小

nm -S main.o

显示每个符号的地址以及该符号占用的字节大小。

提示与注意事项

有效利用 nm 命令的技巧和需要注意的事项。

符号类型字符

nm 输出中每个符号旁边的字符表示符号的类型。大写字母表示全局(global)符号,小写字母表示局部(local)符号。

  • A: 绝对符号 (Absolute)
  • B/b: 未初始化数据段 (BSS)
  • D/d: 已初始化数据段
  • T/t: 文本(代码)段
  • U: 未定义符号 (Undefined)
  • W/w: 弱符号 (Weak)

调试应用

nm 在诊断链接器错误或检查特定函数或变量是否正确包含在库中时非常有用。特别是 -u 选项可以帮助查找未定义的引用,从而解决链接问题。


相同类别命令