检测lib的MSC_VER

时间:2013-12-10 19:38:50

标签: visual-studio visual-studio-2012 static-libraries

我有一个代码库,我正在编译到库中。通常我会将库发送为MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010),但我的客户要求它为MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)

我已经使用Visual Studio 2012下载/安装并编译了我的Lib的新版本。现在我想检查lib以查看它当前使用的_MSC_VER版本以确保我发送它们正确的版本。

如何检测库中使用的_MSC_VER?

2 个答案:

答案 0 :(得分:3)

您可以尝试使用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"

答案 1 :(得分:0)

_MSC_VER是仅用于确定链接功能的LIB或OBJ文件中存在的宏,因此您不能对{em> compiled EXE或DLL使用dumpbin PEfile /rawdata | find "_MSC_VER"文件。在这种情况下,您需要运行check the dependency

dumpbin /dependents PEfile

在依赖项列表中寻找MSVC*.dllVCRUNTIME*.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和_MSC_VER=1800。同样,VCRUNTIME140来自MSVC ++ 14.0,表示Visual Studio 2015和_MSC_VER=1900。您可以检查版本和_MSC_VERhere


有时/rawdata选项甚至在LIB或OBJ文件上也不起作用。我将输出重定向到文件,并由于某种未知原因看到输出在中间被截断。 /dependents选项也不适用于他们。在这种情况下,您需要使用其他方式。如果您拥有GNU工具,则可以运行以下任何一个

strings OBJ_or_LIB.file | grep -Po '_MSC_VER=\d+'
grep -aPo '_MSC_VER=\d+' OBJ_or_LIB.file

或者您也可以使用此PowerShell命令

sls -CaseSensitive '_MSC_VER=\d+' OBJ_or_LIB.file | foreach {$_.matches} | select value

其中slsSelect-String cmdlet