1

我使用 dumpbin /symbols 来查看我创建的库。一些函数在输出中有UNDEF notype。这意味着什么?有没有研究dumpbin输出结构的链接?

4

1 回答 1

5

我们可以查看MSDN 文档dumpbin /SYMBOLS

此选项显示 COFF 符号表。符号表存在于所有目标文件中。只有与 /DEBUG 链接时,COFF 符号表才会出现在图像文件中。

以下是 /SYMBOLS 输出的描述。通过查看 winnt.h(IMAGE_SYMBOL 和 IMAGE_AUX_SYMBOL)或 COFF 文档,可以找到有关 /SYMBOLS 输出含义的其他信息。

给定以下示例转储:

文件 main.obj 的转储
文件类型:COFF 对象

COFF 符号表
000 00000000 DEBUG notype 文件名 | 。文件
      主文件
002 000B1FDB ABS notype 静态 | @comp.id
003 00000000 SECT1 notype 静态 | .drectve
      节长 26,#relocs 0,#linenums 0,校验和 722C964F
005 00000000 SECT2 notype 静态 | 。文本
      部分长度 23,#relocs 1,#linenums 0,校验和 459FF65F,选择 1(不选择重复项)
007 00000000 SECT2 notype () 外部 | _主要的
008 00000000 UNDEF notype () 外部 | ?MyDump@@YAXXZ (void __cdecl MyDump(void))

字符串表大小 = 0x10 字节

概括

      26 .drectve
      23.文本

以下描述以符号编号开头的行描述了包含与用户相关的信息的列:

前三位数字是符号索引/编号。

  • 如果第三列包含 SECTx,则符号在目标文件的该部分中定义。但是,如果出现 UNDEF,则它没有在该对象中定义,必须在其他地方解决。

  • 第五列(静态,外部)说明符号是否仅在该对象内可见,或者它是否是公共的(在外部可见)。静态符号 _sym 不会链接到公共符号 _sym;这些将是名为 _sym 的函数的两个不同实例。

  • 编号行中的最后一列是符号名称,包括修饰的和未修饰的。

并且notype()正如它在锡上所说的那样:它没有类型。

于 2011-08-12T10:05:03.823 回答