【发布时间】:2014-10-06 17:10:24
【问题描述】:
Windows SDK 中是否有工具可以检查库使用的 CRT? 例如我有一个 *.lib 文件,如何检查它是用 /MDd 标志还是 /MT 编译的? 还如何检查 dll 或 exe 是否相同? 这可以用dumpbin来完成吗?
【问题讨论】:
标签: windows winapi msvcrt crt dumpbin
Windows SDK 中是否有工具可以检查库使用的 CRT? 例如我有一个 *.lib 文件,如何检查它是用 /MDd 标志还是 /MT 编译的? 还如何检查 dll 或 exe 是否相同? 这可以用dumpbin来完成吗?
【问题讨论】:
标签: windows winapi msvcrt crt dumpbin
如果它是一个 .lib 文件,一个静态链接库,那么你对 CRT 还一无所知。它还没有关联。您可以了解原始程序员的意图,使用十六进制查看器查看 .lib 文件,记事本也可以。您将看到用于编译嵌入在 .lib 文件中的 .obj 文件的原始命令行。只需搜索“cl.exe”,您就会很清楚从 cl.exe 的路径中使用了哪个编译器版本。你可以看到命令行选项,这样你就会知道 /MD 或 /MT 是否有效。还有 /O 选项,这对于了解您是 Debug 还是 Release 构建很重要。
如果是 .dll 文件,那么 dumpbin.exe /imports 是您的最佳选择。对 msvcrxxx.dll 文件的依赖将可见,其中 xxx 为版本号,如“120”。如果您看到它,则名称会告诉您是否使用了 /MD 或 /MDd,“d”附加到 CRT 的调试版本 如果缺少它,那么您知道使用了 /MT 或 /MTd,没有提示构建风味可用。
遵循库所有者的建议总是最好的,当库的 CRT 版本或构建设置与您的不匹配时,您可能会遇到很多麻烦。您必须向他询问更新的可能性非零,YMMV。
【讨论】: