我有一个代码库,我正在编译到库中。通常我会将库发送为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?
答案 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*.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和_MSC_VER=1800
。同样,VCRUNTIME140来自MSVC ++ 14.0,表示Visual Studio 2015和_MSC_VER=1900
。您可以检查版本和_MSC_VER
值here
有时/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
其中sls
是Select-String
cmdlet