<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Nm_%28Unix%29</id>
	<title>Nm (Unix) - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Nm_%28Unix%29"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Nm_(Unix)&amp;action=history"/>
	<updated>2026-07-15T19:24:05Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Nm_(Unix)&amp;diff=3234970&amp;oldid=prev</id>
		<title>imported&gt;ExultantEditor 来自 2025年12月26日 (五) 17:33</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Nm_(Unix)&amp;diff=3234970&amp;oldid=prev"/>
		<updated>2025-12-26T17:33:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{lowercase|nm (Unix)}}&lt;br /&gt;
{{noteTA|G1=IT}}&lt;br /&gt;
{{Infobox Software &lt;br /&gt;
| name                   = nm&lt;br /&gt;
| logo                   = &lt;br /&gt;
| screenshot             = &lt;br /&gt;
| screenshot size        = &lt;br /&gt;
| caption                = &lt;br /&gt;
| author                 = &lt;br /&gt;
| developer              = [[贝尔实验室|AT&amp;amp;T贝尔实验室]]&lt;br /&gt;
| released               = {{Start date and age|1971|11|3}}&lt;br /&gt;
| latest release version = &lt;br /&gt;
| latest release date    = &lt;br /&gt;
| operating system       = [[Unix]]和[[类Unix]]&lt;br /&gt;
| genre                  = [[命令 (计算机)|命令]]&lt;br /&gt;
| license                = &lt;br /&gt;
| website                = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;#039;&amp;#039;&amp;#039;nm&amp;#039;&amp;#039;&amp;#039;&amp;lt;/tt&amp;gt;命令存在于多数后出版本的[[Unix]]及[[类Unix操作系统|类似]]的[[操作系统]]中。&amp;lt;tt&amp;gt;nm&amp;lt;/tt&amp;gt;被用来检查[[二进制文件]]（包括[[函数库|库]]，编译后的[[目标文件|目标模块]]，共享目标文件，和独立[[可执行文件]]）并显示这些文件的内容，或存储在其中的[[元数据|元信息]]，特别是[[符号表]]。&amp;lt;code&amp;gt;nm&amp;lt;/code&amp;gt;这个名字来源于[[Version 7 Unix]]，其手册页使用术语“名字列表”（name list）而非“符号表”&amp;lt;ref&amp;gt;{{Cite web |title=NM(1) |url=https://man.freebsd.org/cgi/man.cgi?query=nm&amp;amp;manpath=Unix%20Seventh%20Edition&amp;amp;format=ascii |access-date=2025-03-14 |website=Unix Seventh Edition General Commands Manual}}&amp;lt;/ref&amp;gt;。[[GNU计划]]在[[GNU Binutils]]包中提供了一个&amp;lt;tt&amp;gt;nm&amp;lt;/tt&amp;gt;的实现。&lt;br /&gt;
&lt;br /&gt;
==符号表==&lt;br /&gt;
{{main|符号表}}&lt;br /&gt;
来自&amp;lt;tt&amp;gt;nm&amp;lt;/tt&amp;gt;的输出区分各种符号类型。例如，在一个目标文件所提供的[[子例程|函数]]和它所需要的函数之间是有区别的。&amp;lt;tt&amp;gt;nm&amp;lt;/tt&amp;gt;被用作[[调试]]的辅助工具，帮助解决名字冲突和[[C++]][[name mangling|名称修饰]]引起的问题，和验证[[工具链]]的其他部分。&amp;lt;code&amp;gt;[[objdump]] -t&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;[[readelf]] -s&amp;lt;/code&amp;gt;也可以查看目标文件的符号表。&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |+ 符号类型&lt;br /&gt;
|-&lt;br /&gt;
  ! 符号类型&lt;br /&gt;
  ! 描述&lt;br /&gt;
|-&lt;br /&gt;
  | A &lt;br /&gt;
  |全局绝对符号&lt;br /&gt;
|-&lt;br /&gt;
  | a &lt;br /&gt;
  | 局部绝对符号&lt;br /&gt;
|-&lt;br /&gt;
  | B &lt;br /&gt;
  | 全局bss符号&lt;br /&gt;
|-&lt;br /&gt;
  | b &lt;br /&gt;
  | 局部bss符号&lt;br /&gt;
|-&lt;br /&gt;
  | D &lt;br /&gt;
  | 全局数据符号&lt;br /&gt;
|-&lt;br /&gt;
  | d &lt;br /&gt;
  | 局部数据符号&lt;br /&gt;
|-&lt;br /&gt;
  | f &lt;br /&gt;
  | 源文件名字符号&lt;br /&gt;
|-&lt;br /&gt;
  | L &lt;br /&gt;
  | 全局线程本地符号（TLS）&lt;br /&gt;
|-&lt;br /&gt;
  | l &lt;br /&gt;
  | 静态线程本地符号（TLS）&lt;br /&gt;
|-&lt;br /&gt;
  | R&lt;br /&gt;
  | 全局只读符号&lt;br /&gt;
|-&lt;br /&gt;
  | r&lt;br /&gt;
  | 局部只读符号&lt;br /&gt;
|-&lt;br /&gt;
  | T&lt;br /&gt;
  | 全局正文符号&lt;br /&gt;
|-&lt;br /&gt;
  | t&lt;br /&gt;
  | 局部正文符号&lt;br /&gt;
|-&lt;br /&gt;
  | U&lt;br /&gt;
  | 未定义符号&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==样例==&lt;br /&gt;
下面的例子展示了变量和函数在[[全局变量|全局]]、[[局部变量|局部]]、[[外部变量|外部]]、[[静态变量|静态]]、[[自动变量|自动]]和[[初始化]]的不同情况下的不同符号类型。将其存入文件&amp;lt;code&amp;gt;test.c&amp;lt;/code&amp;gt;中，对这个[[C语言|C]]代码如下编译：&amp;lt;code&amp;gt;gcc -c test.c&amp;lt;/code&amp;gt;；或者将其存入文件&amp;lt;code&amp;gt;test.cpp&amp;lt;/code&amp;gt;中，对这个[[C++]]代码如下编译：&amp;lt;code&amp;gt;g++ -c test.cpp&amp;lt;/code&amp;gt;。在二者输出之间的不同还展示了通过在C++代码中使用&amp;lt;code&amp;gt;{{le|extern &amp;quot;C&amp;quot;}}&amp;lt;/code&amp;gt;解决[[名字修饰]]问题的一个例子。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int global_var;&lt;br /&gt;
int global_var_init = 26;&lt;br /&gt;
static int static_var;&lt;br /&gt;
static int static_var_init = 25;&lt;br /&gt;
&lt;br /&gt;
static int static_function()&lt;br /&gt;
{&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int global_function(int p)&lt;br /&gt;
{&lt;br /&gt;
    static int local_static_var;&lt;br /&gt;
    static int local_static_var_init=5;&lt;br /&gt;
    local_static_var = p;&lt;br /&gt;
    return local_static_var_init + local_static_var;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int global_function2()&lt;br /&gt;
{&lt;br /&gt;
    int x;&lt;br /&gt;
    int y;&lt;br /&gt;
    return x+y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef __cplusplus&lt;br /&gt;
extern &amp;quot;C&amp;quot; {&lt;br /&gt;
#endif&lt;br /&gt;
void non_mangled_function()&lt;br /&gt;
{&lt;br /&gt;
    // I do nothing&lt;br /&gt;
}&lt;br /&gt;
#ifdef __cplusplus&lt;br /&gt;
}&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    global_var = 1;&lt;br /&gt;
    static_var = 2;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果上述代码使用了[[gcc]] C编译器来编译，&amp;lt;code&amp;gt;nm -n&amp;lt;/code&amp;gt;命令的输出将把符号按其地址的数值来排序成如下这样：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ nm -n test.o&lt;br /&gt;
0000000000000000 B global_var&lt;br /&gt;
0000000000000000 D global_var_init&lt;br /&gt;
0000000000000000 t static_function&lt;br /&gt;
0000000000000004 b static_var&lt;br /&gt;
0000000000000004 d static_var_init&lt;br /&gt;
0000000000000008 b local_static_var.1&lt;br /&gt;
0000000000000008 d local_static_var_init.0&lt;br /&gt;
000000000000000f T global_function&lt;br /&gt;
0000000000000033 T global_function2&lt;br /&gt;
0000000000000045 T non_mangled_function&lt;br /&gt;
0000000000000050 T main&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在使用了C++编译器时，输出是不同的：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$nm -n test.o&lt;br /&gt;
0000000000000000 B global_var&lt;br /&gt;
0000000000000000 D global_var_init&lt;br /&gt;
0000000000000000 t _ZL15static_functionv&lt;br /&gt;
0000000000000004 b _ZL10static_var&lt;br /&gt;
0000000000000004 d _ZL15static_var_init&lt;br /&gt;
0000000000000008 b _ZZ15global_functioniE16local_static_var&lt;br /&gt;
0000000000000008 d _ZZ15global_functioniE21local_static_var_init&lt;br /&gt;
000000000000000f T _Z15global_functioni&lt;br /&gt;
0000000000000033 T _Z16global_function2v&lt;br /&gt;
0000000000000045 T non_mangled_function&lt;br /&gt;
0000000000000050 T main&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
*[[objdump]]&lt;br /&gt;
*[[readelf]]&lt;br /&gt;
&lt;br /&gt;
==引用==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==外部链接==&lt;br /&gt;
*{{man|cu|nm|SUS|写出一个目标文件的名字列表}}&lt;br /&gt;
&lt;br /&gt;
{{Unix commands}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Unix编程工具]]&lt;br /&gt;
[[Category:Unix SUS2008实用工具]]&lt;/div&gt;</summary>
		<author><name>imported&gt;ExultantEditor</name></author>
	</entry>
</feed>