检测到lib的MSC_VER

问题描述 投票:5回答:2

我有一个要编译到库中的代码库。通常,我会将库作为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?

visual-studio visual-studio-2012 static-libraries
2个回答
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"

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.