检查运行时静态库或dll使用的是什么

cod*_*ddy 9 windows winapi crt msvcrt dumpbin

Windows SDK中是否有一个工具可以阻止库使用什么CRT?例如,我有一个*.lib文件,如何检查是否使用/ MDd标志或/ MT进行编译?还有如何检查dll或exe相同?这可以用dumpbin完成吗?

Han*_*ant 13

如果它是一个.lib文件,一个静态链接库,那么你还不知道有关CRT的任何信息.它尚未联系.你可以找到原始程序员的意图,使用十六进制查看器查看.lib文件,记事本也可以.您将看到用于编译嵌入在.lib文件中的.obj文件的原始命令行.只需搜索"cl.exe",您就可以清楚地知道从cl.exe的路径使用了什么编译器版本.您可以看到命令行选项,以便您知道/ MD或/ MT是否生效.而O/O选项对于了解是否有Debug或Release版本非常重要.

如果是.dll文件,则dumpbin.exe/imports是您的最佳选择.将显示对msvcrxxx.dll文件的依赖性,xxx的版本号如"120".如果你看到它然后名称告诉你是否使用/ MD或/ MDd,CRT的调试版本附加"d"如果它丢失,那么你知道使用了/ MT或/ MTd,没有提示建立味道.

根据图书馆老板的建议总是最好的,当图书馆的CRT版本或版本设置与您的版本不匹配时,您会遇到很多麻烦.有了非零赔率,你必须要求他更新,YMMV.

  • 在我检查的所有 .lib 文件中,我只看到 -defaultlib:MSVCRT 或 -defaultlib:MSVCRTD 而不是整个 cl.exe dcommand-line。但是 defautlib 标志足以说明是 /MD 还是 /MDD 传递给 cl.exe。 (2认同)