当前位置:  开发笔记 > 后端 > 正文

有没有办法确定使用哪个版本的Visual Studio来编译静态库?

如何解决《有没有办法确定使用哪个版本的VisualStudio来编译静态库?》经验,为你挑选了3个好方法。

我有一组静态库(.lib)文件,其中一个文件可能是使用不同版本的Visual Studio构建的.这导致链接所有这些项目的项目的代码生成失败.有没有办法确定使用哪个版本的Visual Studio来编译静态库?



1> James McNell..:

对于发布库,您不太可能确定版本.

对于调试库,您可以使用dumpbin:

dumpbin /rawdata:1 library.lib

程序集清单应位于转储的开头,并包含库所需的CRT版本以及用于构建库的编译器的完整路径.

对于可执行文件和DLL,您可以使用dumpbin获取链接器版本; 它在"可选的标题值"下

dumpbin /headers program.exe

也许其他人知道如何获得发布库的版本; 如果是的话,我当然也很感兴趣.



2> mheyman..:

我总是使用类似的东西(在cygwin窗口中):

strings -f *.lib | grep 'Visual Studio'

编译器在调试版本的库中粘贴编译器的路径,Visual Studio的编译器默认位置在包含文本"Visual Studio"的路径下.

因此,就像James McNellis的回答一样,这也仅适用于调试构建,并且进一步限制为实际使用位于路径中具有"Visual Studio # " 的目录中的编译器的构建.

几年前我通过一点意外发现了这种方法,但它还没有失败.

这样做的好处是,如果您熟悉Unix命令行工具,则很容易记住.



3> rustyx..:

如果你有相应的.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.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有