为什么DumpBin告诉我我的二进制文件中没有COMDAT?

时间:2010-07-29 08:07:52

标签: visual-studio-2005 dumpbin

这是我从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的使用是这个问题的焦点:把它带走,男孩和女孩......

1 个答案:

答案 0 :(得分:7)

经过一天的淘汰后,我发现DUMPBIN文档有点含糊不清。

需要打开功能级别链接(/ Gy)才能获得COMDAT输出。开启交叉模块优化(/ GL)会将代码生成延迟到链接时间。因此,尽管标题信息对于使用/ GL编译的代码是可用的,但它是非常有限的。这就是为什么它是DUMPBIN唯一可用的选项 - 所有其他选项需要更多信息,其生成由/ GL延迟。