我有一组静态库(.lib)文件,其中一个文件可能是使用不同版本的Visual Studio构建的.这导致链接所有这些项目的项目的代码生成失败.有没有办法确定使用哪个版本的Visual Studio来编译静态库?
对于发布库,您不太可能确定版本.
对于调试库,您可以使用dumpbin:
dumpbin /rawdata:1 library.lib
程序集清单应位于转储的开头,并包含库所需的CRT版本以及用于构建库的编译器的完整路径.
对于可执行文件和DLL,您可以使用dumpbin获取链接器版本; 它在"可选的标题值"下
dumpbin /headers program.exe
也许其他人知道如何获得发布库的版本; 如果是的话,我当然也很感兴趣.
我总是使用类似的东西(在cygwin窗口中):
strings -f *.lib | grep 'Visual Studio'
编译器在调试版本的库中粘贴编译器的路径,Visual Studio的编译器默认位置在包含文本"Visual Studio"的路径下.
因此,就像James McNellis的回答一样,这也仅适用于调试构建,并且进一步限制为实际使用位于路径中具有"Visual Studio # " 的目录中的编译器的构建.
几年前我通过一点意外发现了这种方法,但它还没有失败.
这样做的好处是,如果您熟悉Unix命令行工具,则很容易记住.
如果你有相应的.PDB文件,那么你可以使用像Pdb Inspector这样的工具从那里看到编译器的版本.
或者在十六进制查看器中打开PDB并搜索字符串"Microsoft(R)Optimizing Compiler".该版本将在该字符串之前的四个2字节十六进制值中,如下例所示:
000000A060: .. .. .. .. .. .. . ... .. .. .. .. .. .. 13 00 .. 000000A070: 00 00 6E 5D 00 00 4D 69 63 72 6F 73 6F 66 74 20 ......Microsoft 000000A080: 28 52 29 20 4F 70 74 69 6D 69 7A 69 6E 67 20 43 (R) Optimizing C 000000A090: 6F 6D 70 69 6C 65 72 00 .. .. .. .. .. .. .. .. ompiler ........
因此版本是HEX 13 00,00 00,6E 5D,00 00或19.0.23918.0.