nm
是 Linux 系统中的一个命令行工具,用于显示目标文件(如编译后的二进制文件、库文件等)中的符号表信息。符号表包含了程序中定义和引用的函数、变量等的名称及其在内存中的地址。online
通常指的是在线模式,但在这里可能是指 nm
命令的使用场景之一,即在远程服务器上在线使用。
符号表:在编译后的程序中,符号表记录了所有全局变量、函数等的名称及其对应的内存地址。这对于调试和链接过程非常重要。
nm 命令:nm
是一个用于查看这些符号信息的工具。它可以列出目标文件中的符号,并显示它们的类型、值和名称。
nm
查看程序的符号信息,帮助定位未定义的符号或重复定义的问题。nm
可以用来检查库之间是否存在符号冲突。nm
可以显示哪些符号是导出的,哪些是未导出的。nm
输出的符号类型包括:
A
:该符号的值是绝对的,不允许在链接过程中改变。B
或 b
:该符号位于非初始化数据段(BSS)中。D
或 d
:该符号位于初始化数据段中。T
或 t
:该符号位于代码段(文本段)中。U
:该符号在当前文件中未定义,需要在其他文件中寻找。W
或 w
:弱符号。nm
来检查库文件导出了哪些符号,以及是否有未定义的符号。nm
来检查相关文件的符号表,找出问题所在。问题:使用 nm
查看符号表时,发现某些符号未定义(显示为 U
)。
原因:
解决方法:
假设你有一个简单的 C 程序 main.c
和一个库文件 libexample.a
,你可以这样使用 nm
:
gcc -c main.c -o main.o
ar rcs libexample.a example.o
nm main.o
nm libexample.a
这将分别显示 main.o
和 libexample.a
中的符号表信息。
总之,nm
是一个强大的工具,可以帮助开发者理解和解决与程序符号相关的问题。
腾讯云数据库TDSQL训练营
腾讯云数据库TDSQL(PostgreSQL版)训练营
云+社区沙龙online
云+社区沙龙online第6期[开源之道]
云+社区沙龙online第6期[开源之道]
2022OpenCloudOS社区开放日
云原生正发声
腾讯云数据库TDSQL训练营
领取专属 10元无门槛券
手把手带您无忧上云