如何查看LIB文件版本?

时间:2016-02-04 15:02:10

标签: visual-studio-2010 winapi portable-executable coff dumpbin

重新安装Visual Studio 2010后,我重新编译了代码并遇到以下错误:

  

错误'LINK:致命错误LNK1123:转换为COFF期间失败:文件无效或损坏'

解决方案提到lib文件不兼容,我需要安装Visual Studio 2010 SP1。我做到了,现在已经解决了。

我想知道如何检查SP1是否创建了lib文件? 我试过dumpbin,但是在结果中找不到版本。

1 个答案:

答案 0 :(得分:4)

这与导致此问题的LIB文件不兼容,因此检查创建它的链接器版本无论如何都不是解决方案。

问题是cvtres.exe(由链接器工具链在内部使用)取决于VS 2010 RTM附带的特定DLL(msvcr100_clr0400.dll)。当您更新到更高版本的.NET Framework(例如,通过安装.NET 4.5或安装更高版本的VS)时,将替换此DLL。这会阻止cvtres.exe工作。

安装VS 2010 SP1的原因是修复它是因为它实际修改了cvtres.exe应用程序以破坏依赖关系。现在链接器工具链的所有部分都可以工作,您可以编译并链接代码而不会出错。

当然,当您开始混合由不同版本的编译器和/或链接器创建的库时,可能会遇到其他问题。它们不能保证创建100%兼容的输出,因此不支持混合它们(至少在主要版本之间不支持,我不确定此规则如何应用于服务包)。

通常,每当更新构建系统时,最好只重新编译所有库。你不会这样做的唯一一次是你没有源代码,在这种情况下,你需要非常小心更新你的构建系统,以免引入无偿的不兼容性。 / p>

就确定准备特定二进制文件的链接器版本而言,使用dumpbin.exe(包含在SDK中)是正确的方法。对于静态库,请从Visual Studio SDK命令提示符运行以下命令:

dumpbin /rawdata:1 MyLibrary.lib

您将看到程序集清单,它将包含用于构建库的编译器的完整路径以及它所依赖的CRT的版本。

对于动态库(,DLL)和可执行文件,请运行以下命令:

dumpbin /headers MyApp.exe

查看链接器版本的“可选标头值”部分(实际上不是可选的),以及生成链接器的时间戳。

请注意,您不太可能在库或二进制文件的发布版本中找到此信息。