【问题标题】:Why is DumpBin telling me there are no COMDATs in my binaries?为什么 DumpBin 告诉我我的二进制文件中没有 COMDAT?
【发布时间】:2010-07-29 08:07:52
【问题描述】:

这是我从dumpbin AchievementsTable.obj /HEADERS 得到的输出

Microsoft (R) COFF/PE Dumper Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file AchievementsTable.obj

File Type: ANONYMOUS OBJECT

ANON OBJECT HEADER VALUES
               1 version
             14C machine (x86)
        4C51334D time date stamp Thu Jul 29 08:52:45 2010
                 ClassID: {0CB3FE38-D9A5-4DAB-AC9B-D6B6222653C2}
            945F size
               0 flags

我的所有来源都是这样做的。我正在使用 VisualStudio 2005。我知道有很多 COMDAT 被导出,因为 .exe 随后链接并正确执行:我应该避免编译器开关吗?以下是我正在使用的:

/O1
/Ob2
/Oi
/GT
/GL
/I "..\dxsdk\include" <lots of include paths>
/D "WIN32" <lots of #defines>
/GF
/FD
/MT
/GS-
/Gy
/arch:SSE2
/fp:fast
/GR-
/Fo <directory specified>
/Fd <pdb filename specified>
/FR <directory specified>
/W4
/c
/Zi
/TP .\Source\databases\AchievementsTable.cpp

我对我的选择持开放态度,但 DumpBin 的使用是这个问题的重点:把它拿走,男孩和女孩......

【问题讨论】:

  • 当然如果你想看符号,你需要运行dumpbin AchievementsTable.obj /SYMBOLS?
  • 不,我使用的是 /GL,所以只有 /HEADERS 选项可用。我正在使用 SymbolSort(有关更多信息,请参阅gameangst.com/?p=46),它需要 dumpbin /HEADERS 的输出
  • 对不起,我在这里没有说清楚,我的意思是 COMDATs 而不是符号。我会修改问题。

标签: visual-studio-2005 dumpbin


【解决方案1】:

经过一天的排除,我发现DUMPBIN文档有点含糊。

需要打开功能级链接 (/Gy) 才能获得 COMDAT 输出。打开跨模块优化 (/GL) 会将代码生成延迟到链接时间。因此,虽然头信息确实可用于使用 /GL 编译的代码,但它非常有限。这就是为什么它是 DUMPBIN 唯一可用的选项 - 所有其他选项都需要更多信息,而这些信息的生成会被 /GL 延迟。

【讨论】:

  • “我发现 DUMPBIN 文档有点模棱两可……” - 如果有什么安慰的话,我认为微软最终改变了它。 dumpbin /SYMBOLS 的文档现在声明:“只有 /HEADERS DUMPBIN 选项可用于使用 /GL 编译器选项生成的文件。”看起来更改发生在 VS2005 前后的某个时间。跨度>
猜你喜欢
  • 2015-04-12
  • 2018-05-25
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2019-03-11
  • 1970-01-01
相关资源
最近更新 更多