【问题标题】:What does UNDEF and notype() mean when seeing the C++ library information using dumpbin?使用 dumpbin 查看 C++ 库信息时,UNDEF 和 notype() 是什么意思?
【发布时间】:2011-08-12 09:53:52
【问题描述】:

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

【问题讨论】:

    标签: c++ dumpbin


    【解决方案1】:

    我们可以看看the MSDN documentation for dumpbin /SYMBOLS

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

    以下是 /SYMBOLS 输出的说明。额外的 有关 /SYMBOLS 输出含义的信息可以通过查看找到 在 winnt.h(IMAGE_SYMBOL 和 IMAGE_AUX_SYMBOL)或 COFF 文档中。

    鉴于以下示例转储:

    文件 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() 的意思正是它在锡上所说的:它没有类型。

    【讨论】:

    • notypenotype () 之间存在巨大差异。第一个指定数据标签,第二个指定功能标签。默认情况下,Microsoft 的 LINKER 并不关心这种差异,但 LIB 会并且不会将一种类型与另一种类型解析。查看 COFF 的 win32 扩展,其中类型字段中的位实际上确实有意义,尽管所有这些都被总结为 notype
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2017-08-10
    • 2010-12-18
    • 2018-08-23
    • 1970-01-01
    相关资源
    最近更新 更多