Visual studio 检测库的MSC\u VER
我有一个正在编译到库中的代码库。通常我会将库作为Visual studio 检测库的MSC\u VER,visual-studio,visual-studio-2012,static-libraries,redistributable,Visual Studio,Visual Studio 2012,Static Libraries,Redistributable,我有一个正在编译到库中的代码库。通常我会将库作为MSVC++10.0\u MSC\u VER==1600(Visual Studio 2010)发送,但我的客户要求它作为MSVC++11.0\u MSC\u VER==1700(Visual Studio 2012)发送 我已使用Visual Studio 2012下载/安装并编译了我的库的新版本。现在我想检查lib,查看它当前使用的\u MSC\u VER版本,以确保我向它们发送的是正确的版本 您如何检测库中使用的\u MSC\u VER?您可
MSVC++10.0\u MSC\u VER==1600(Visual Studio 2010)
发送,但我的客户要求它作为MSVC++11.0\u MSC\u VER==1700(Visual Studio 2012)
发送
我已使用Visual Studio 2012下载/安装并编译了我的库的新版本。现在我想检查lib,查看它当前使用的\u MSC\u VER
版本,以确保我向它们发送的是正确的版本
您如何检测库中使用的
\u MSC\u VER
?您可以尝试使用dumpbin
c:\dev\tagainijisho>dumpbin C:\Qt\5.4\msvc2010_opengl\lib\qtmaind.lib /rawdata | find "_MSC_VER"
00000040: 3A 22 5F 4D 53 43 5F 56 45 52 3D 31 36 30 30 22 :"_MSC_VER=1600"
\u MSC\u VER
是一个宏,它只存在于LIB或OBJ文件中,用于确定链接功能,因此对于编译的EXE或DLL文件,不能使用dumpbin PEfile/rawdata查找“\u MSC\u VER”
。在这种情况下,您需要通过运行
dumpbin /dependents PEfile
在依赖项列表中查找MSVC*.dll
或VCRUNTIME*.dll
。之后的数字是VC可再发行版本
PS C:> dumpbin.exe /dependents C:\qpdf17.dll
[...]
Image has the following dependencies:
ADVAPI32.dll
MSVCP120.dll
MSVCR120.dll
KERNEL32.dll
[...]
PS C:> dumpbin.exe /dependents C:\qpdf26.dll
[...]
Image has the following dependencies:
ADVAPI32.dll
MSVCP140.dll
KERNEL32.dll
VCRUNTIME140.dll
VCRUNTIME140_1.dll
[...]
PS C:>
在上面的示例中,MSVCP120来自MSVC++12.0,这意味着Visual Studio 2013和\u MSC\u VER=1800
。类似地,VCRUNTIME140来自MSVC++14.0,这意味着Visual Studio 2015和\u MSC\u VER=1900
。您可以检查版本和\u MSC\u VER
值
有时,
/rawdata
选项甚至不能用于LIB或OBJ文件。我将输出重定向到文件,并看到输出在中间被截断,原因不明。/dependents
选项也不适用于他们。在这种情况下,你需要用另一种方法。如果您有GNU工具,那么您可以运行以下任一项
strings OBJ_或_LIB.file | grep-Po'_MSC_VER=\d+'
grep-aPo'\u MSC\u VER=\d+'OBJ\u或\u LIB.file
或者也可以使用此PowerShell命令
sls-区分大小写“\u MSC\u VER=\d+”OBJ_或_LIB.file | foreach{$\u.matches}|选择值
其中,
sls
是使用.lib中的函数编写一个小测试程序。将其与旧版本的.lib链接,并验证您是否获得了客户获得的链接器错误。现在将它与您的新版本链接,并验证您没有收到链接器错误。@HansPassant必须有一个能够检测库版本的工具。制作一个特定于我的lib的应用程序来检测MSC版本对我来说似乎是一种黑客行为。是的,这个工具被称为“linker”。正是它产生了错误。如果确实需要,可以使用notepad.exe。搜索FAILIFMISMATCH。你可以在旧的.lib中找到它们