我有一个要编译到库中的代码库。通常,我会将库作为MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
发送,但是我的客户要求将其作为MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
。
我已经使用Visual Studio 2012下载/安装并编译了我的Lib的新版本。现在,我想检查该库以查看其当前使用的_MSC_VER版本,以确保我向其发送了正确的版本。
您如何检测库中使用了什么_MSC_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"
_MSC_VER
是仅存在于LIB或OBJ文件中的宏,用于确定链接功能,因此您不能将dumpbin PEfile /rawdata | find "_MSC_VER"
用于compiled EXE或DLL文件。在这种情况下,您需要通过运行
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