首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法确定哪个版本的Visual Studio是用来编译静态库的?

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

Stack Overflow用户
提问于 2009-09-11 16:07:44
回答 3查看 26.3K关注 0票数 36

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-09 01:46:43

对于发行库,您不太可能确定版本。

对于调试库,可以使用dumpbin

代码语言:javascript
运行
复制
dumpbin /rawdata:1 library.lib

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

对于可执行文件和DLL,您可以使用dumpbin获取链接器版本;它位于"OPTIONAL HEADER VALUES“下

代码语言:javascript
运行
复制
dumpbin /headers program.exe

也许其他人知道有一种方法可以获得发行库的版本;如果他们知道,我当然也很感兴趣。

票数 30
EN

Stack Overflow用户

发布于 2016-05-19 16:45:36

如果您有相应的.PDB文件,那么您可以使用Pdb Inspector这样的工具从那里查看编译器的版本。

或者在十六进制查看器中打开PDB并搜索字符串"Microsoft (R) Optimizing“。该版本将包含四个2字节的十六进制值,就在该字符串之前,如下例所示:

代码语言:javascript
运行
复制
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 ........

因此,版本为十六进制13 00、00 00、6E 5D、00 00或19.0.23918.0。

票数 9
EN

Stack Overflow用户

发布于 2017-09-05 16:23:04

如果静态库是用C++编写的,并且是用MSVC2010或更新版本构建的,则编译器可能已将FAILIFMISMATCH指令放入目标文件中。

我找不到微软关于FAILIFMISMATCH指令的官方文档,但它似乎被链接器用来检测C++标准库版本之间的不兼容性。

您可以使用以下命令从静态库中打印出这些指令:

代码语言:javascript
运行
复制
find "FAILIFMISMATCH" xyz.lib

(或者使用mheyman提到的方法,如果你喜欢cygwin或msys)

结果可能类似于:

代码语言:javascript
运行
复制
0@   /FAILIFMISMATCH:"_MSC_VER=1900" /FAILIFMISMATCH:"_ITERATOR_DEBUG_LEVEL=0" /FAILIFMISMATCH:"RuntimeLibrary=MD_DynamicRelease" /DEFAULTLIB:"msvcprt" /FAILIFMISMATCH:"_CRT_STDIO_ISO_WIDE_SPECIFIERS=0" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"MSVCRT" /DEFAULTLIB:"OLDNAMES"

注意第一个指令:"_MSC_VER=NNNN“。在我的观察中,NNNN总是与用于创建目标文件的编译器版本相匹配。在我例子中,xyz.lib是用MSVC2015更新3创建的,它的C++编译器版本是19.00.24215,所以它将/FAILIFMISMATCH:"_MSC_VER=1900“放在目标文件中。

可以在at here中找到Visual Studio版本和Microsoft C/C++编译器版本之间的详细映射。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1411854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档