【问题标题】:Unknown compiler version while compiling Boost with MSVC 14.0 (VS 2015)使用 MSVC 14.0 (VS 2015) 编译 Boost 时编译器版本未知
【发布时间】:2015-08-25 23:22:22
【问题描述】:

尝试在我的计算机上编译 Boost 库时,我收到“未知的编译器版本 - 请运行配置测试并报告结果”。
我有最新的 Boost(截至发帖日期)- 1.58.0。
Boost 还不支持 MSVC 14.0 吗?如何“运行配置测试”?

.

【问题讨论】:

  • Boost 文档对此有何评论?
  • @AdrianoRepetti:如何取消定义“BOOST_ASSERT_CONFIG”?您可能希望查看屏幕截图。我什至还没有在 Visual Studio 项目中。我想先编译lib文件..还有..-1?至少解释一下原因。
  • @KABoissonneault 为了回答您的问题,文档说:“该库已在以下平台上成功构建和测试:... MSVC 9.0 和更高版本”。没看懂。。
  • 此时,我会考虑直接联系 Boost 人员。他们可能有更好的答案
  • 如果您使用 NuGet,您可以轻松升级到最新版本的 boost hat 将适用于您的编译器。

标签: c++ boost visual-studio-2015


【解决方案1】:

最新(发布此答案时)Boost 1.58 确实支持 MSVC 14.0 Preview,这是 Boost 1.58 发布时最新的 MS 编译器。 现在,Visual Studio 的最新版本是 2015 RC,它没有包含在 boost 1.58 配置文件中。

要阻止 Boost 1.58 抱怨未知编译器版本,请编辑 boost/config/compiler/visualc.hpp 并替换:

// last known and checked version is 19.00.22129 (VC14 Preview):
#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190022310)

与:

// last known and checked version is 19.00.22816 (VC++ 2015 RC):
#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190022816)

您可以在 boost repo here 中找到已经为即将发布的 Boost 1.59 版本完成的内容。

更新:对于 Visual Studio 2015 RTM,将其设置为:

// last known and checked version is 19.00.23026 (VC++ 2015):
#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190023026)

Update2:对于 Visual Studio 2015 Update 1,将其设置为:

// last known and checked version is 19.00.23506 (VC++ 2015 Update 1):
#if (_MSC_VER > 1800 && _MSC_FULL_VER > 190023506)

此外,如果您之前在 toolset=msvc-14.0 上运行过 Boost.Build,请从 C:\Users\<name>\AppData\Local\Temp 中删除以下缓存文件:

b2_msvc_14.0_vcvarsall_x86.cmd 
b2_msvc_14.0_vcvarsall_x86_amd64.cmd 
b2_msvc_14.0_vcvarsall_x86_arm.cmd

更多关于 here.

更新3 为了将来参考,在您的 Visual Studio 工具命令提示符中运行命令 cl /Bv 以查看您的版本号(参数区分大小写)。

我的输出如下:

C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe:        Version 19.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\c1.dll:        Version 19.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\c1xx.dll:      Version 19.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\c2.dll:        Version 19.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\link.exe:      Version 14.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\mspdb140.dll:  Version 14.11.25506.0
 C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\1033\clui.dll: Version 19.11.25506.0

由此您可以推断出_MSC_VER 是 1911(从文本“版本 19.11”),_MSC_FULL_VER 是 191125506。

【讨论】:

  • 最后——构建成功。不过,感谢您的信息。
  • 对于下一次 VS 更新,可以通过 cl 命令在 Visual Studio Command Prompt (2015) 中获取幻数
【解决方案2】:

编辑 boost/config/compiler/visualc.hpp 并将关于最后一个已知和检查的版本的测试替换为以下行之一:

1) 如果要完全停用版本检查:

#if 0

2) 如果您只想查看主要版本(选择一行):

#if (_MSC_VER > 1900) // Visual Studio 2015
#if (_MSC_VER > 1911) // Visual Studio 2017 15.0, 15.1 and 15.2
#if (_MSC_VER > 1911) // Visual Studio 2017 15.3 and 15.4
#if (_MSC_VER > 1912) // Visual Studio 2017 15.5
#if (_MSC_VER > 1913) // Visual Studio 2017 15.6
#if (_MSC_VER > 1914) // Visual Studio 2017 15.7
#if (_MSC_VER > 1915) // Visual Studio 2017 15.8
#if (_MSC_VER > 1916) // Visual Studio 2017 15.9
#if (_MSC_VER > 1920) // Visual Studio 2019 16.0

3) 如果要同时检查主要版本和次要版本(选择一行):

#if (_MSC_VER > 1900 && _MSC_FULL_VER > 190023506) // Visual Studio 2015 Update 1
#if (_MSC_VER > 1900 && _MSC_FULL_VER > 190023918) // Visual Studio 2015 Update 2
#if (_MSC_VER > 1900 && _MSC_FULL_VER > 190023918) // Visual Studio 2015 Update 3
#if (_MSC_VER > 1910 && _MSC_FULL_VER > 191025017) // Visual Studio 2017 15.0, 15.1 and 15.2
#if (_MSC_VER > 1911 && _MSC_FULL_VER > 191125542) // Visual Studio 2017 15.3 and 15.4
#if (_MSC_VER > 1912 && _MSC_FULL_VER > 191225835) // Visual Studio 2017 15.5
#if (_MSC_VER > 1913 && _MSC_FULL_VER > 191326132) // Visual Studio 2017 15.6
#if (_MSC_VER > 1914 && _MSC_FULL_VER > 191426433) // Visual Studio 2017 15.7
#if (_MSC_VER > 1915 && _MSC_FULL_VER > 191526726) // Visual Studio 2017 15.8
#if (_MSC_VER > 1916 && _MSC_FULL_VER > 191627030) // Visual Studio 2017 15.9
#if (_MSC_VER > 1920 && _MSC_FULL_VER > 192027508) // Visual Studio 2019 16.0

【讨论】:

  • Visual Studio 2017:#if (_MSC_VER > 1910 && _MSC_FULL_VER > 191025017)
  • VS2015U3 是 190024215
  • 现在最新版本 VS 2017 完整版在 7(不是 6)结束,但在 boost 1.65 中只使用了 _MSC_VER,所以如果你只更新那部分就可以了。
  • 这个奇怪,我刚更新完,我这边的完整版还是191125506
  • VS2017 v15.5.1 _MSC_VER=1912 _MSC_FULL_VER=191225830
【解决方案3】:

一般来说,打开boost/config/compiler/visualc.hpp 并将鼠标悬停在_MSC_FULL_VER 上以查看安装在您的环境中的版本。

【讨论】:

    【解决方案4】:

    现在使用完全发布版的 msvc-14.0 (Visual Studio 2015),你可以这样使用:

    #if (_MSC_VER > 1800 && _MSC_FULL_VER > 190023026)
    

    这有什么危险吗?我们是否应该等待下一个经过官方编辑的 Boost 版本具有此值?

    【讨论】:

      【解决方案5】:

      我在 Ogre 1.9 - Visual Studio 2015 中尝试过以下代码。

      最后已知和检查的版本是 19.00.23506(VC++ 2015 Update 1)

      if (_MSC_VER > 1800 && _MSC_FULL_VER > 190023506)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多