【问题标题】:Building boost with Visual Studio 2013 (Express)使用 Visual Studio 2013 (Express) 构建提升
【发布时间】:2013-12-28 09:48:37
【问题描述】:

是否有人使用 Visual Studio 2013 Express 成功构建了 Boost?

正如 Boost 网站所述,我对这是否可行感到困惑:

Visual Studio 2013/Visual C++ 12 的已知错误。

Visual Studio 2013 在发布过程中很晚才发布,因此存在几个未解决的问题。其中包括:

由于缺少包含,序列化无法编译。

使用 Boost.Container 的 allocator_traits 中的 has_member_function_callable_with 会导致编译错误 (#9332)。

在 Unordered 和 MultiIndex 等库中,使用初始化列表调用重载函数可能会导致编译错误,Visual C++ 声称重载不明确。这是一个 Visual C++ 错误,尚不清楚是否有好的解决方法。这不会影响不使用初始化列表的代码,或者使用不需要隐式转换的初始化列表(即容器的确切值类型的初始化列表)。

线程:ex_scoped_thread 编译失败 (#9333)。

不过,this poster 表示可以使用 VS 2013 构建 Boost 1.55.0,无需任何补丁。

我曾尝试使用 VS 2013 构建 Boost,但确实至少得到了序列化错误。

【问题讨论】:

  • 您使用的是 Express for Windows Store 还是 Express for Desktop?
  • 我正在使用 Express for Desktop。
  • @TheArtTrooper 可能指的是主干(开发)版本,而不是 tar 球。因为,是的,它会“构建”但某些库(序列化)需要补丁。看我的回答。

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


【解决方案1】:

我最近在 MSVC12 (VS2013) 上构建了 Boost,只使用了一个小补丁:

主题:[PATCH] 修复 MSVC2013 上的 boost 序列化构建

包括修复(手动)
config_decltype_n3276_new.patch(来自https://svn.boost.org/trac/boost/ticket/9410

如您所见,它结合了来自 https://svn.boost.org/trac/boost/ticket/9410 的补丁和一些手动包含修复(它们很简单)。

这是有效的补丁:

diff --git a/3rdparty/boost_1_55_0/boost/archive/iterators/transform_width.hpp b/3rdparty/boost_1_55_0/boost/archive/iterators/transform_width.hpp
index 5a5c7b7..8da85ee 100644
--- a/3rdparty/boost_1_55_0/boost/archive/iterators/transform_width.hpp
+++ b/3rdparty/boost_1_55_0/boost/archive/iterators/transform_width.hpp
@@ -29,6 +29,7 @@

#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/iterator_traits.hpp>
+#include <algorithm>

namespace boost { 
namespace archive {
diff --git a/3rdparty/boost_1_55_0/boost/config/compiler/visualc.hpp b/3rdparty/boost_1_55_0/boost/config/compiler/visualc.hpp
index 695fa94..1c0f4f0 100644
--- a/3rdparty/boost_1_55_0/boost/config/compiler/visualc.hpp
+++ b/3rdparty/boost_1_55_0/boost/config/compiler/visualc.hpp
@@ -180,13 +180,13 @@
#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#  define BOOST_NO_CXX11_DECLTYPE_N3276
#endif

// C++11 features not supported by any versions
#define BOOST_NO_CXX11_CHAR16_T
#define BOOST_NO_CXX11_CHAR32_T
#define BOOST_NO_CXX11_CONSTEXPR
-#define BOOST_NO_CXX11_DECLTYPE_N3276
#define BOOST_NO_CXX11_NOEXCEPT
#define BOOST_NO_CXX11_UNICODE_LITERALS
#define BOOST_NO_SFINAE_EXPR
diff --git a/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_fail.cpp b/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_fail.cpp
index 216300c..1c0e6c7 100644
--- a/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_fail.cpp
+++ b/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_fail.cpp
@@ -32,6 +32,6 @@

int main( int, char *[] )
{
-   return boost_no_decltype_n3276::test();
+   return boost_no_cxx11_decltype_n3276::test();
}

diff --git a/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_pass.cpp b/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_pass.cpp
index 35427be..86e3664 100644
--- a/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_pass.cpp
+++ b/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_pass.cpp
@@ -27,11 +27,11 @@
#ifndef BOOST_NO_CXX11_DECLTYPE_N3276
#include "boost_no_decltype_n3276.ipp"
#else
-namespace boost_no_decltype_n3276 = empty_boost;
+namespace boost_no_cxx11_decltype_n3276 = empty_boost;
#endif

int main( int, char *[] )
{
-   return boost_no_decltype_n3276::test();
+   return boost_no_cxx11_decltype_n3276::test();
}

即使使用 EPA Portable Archive 实现,序列化也能很好地工作

免责声明这是“常规”Visual Studio。它可能适用于 VS Express。 (如果你有 Windows SDK)

【讨论】:

  • @Mgetz 你确定你有序列化库吗:/ 如果你不使用它,很容易错过它构建失败
  • 你能告诉我如何应用这个补丁吗?
  • 我可以 :) 首先,您可以阅读并手动应用它(它是人类可读的,总共只有 9 行)。我刚刚清理了一些补丁(意外包含了一个冗余的补丁文件)。更多方向,我建议search on SO。祝你好运
  • @sehe 非常感谢您的帮助。我手动修补了文件,然后使用 svn-diff 创建了自己的补丁文件以备将来使用。可能不是实现目标的最有效方式,但我最终到达了那里。我现在可以使用 VS 2013 构建 boost 1.55。
【解决方案2】:

我使用 BlueGo 直接从源代码构建 Boost,因为在不应用补丁的情况下无法使用 VS2013 构建 Boost 1.55.0 - 但是这个错误已经在 boost 存储库中修复了

这里你可以看到 BlueGo 的截图 - 在版本组合框下你也可以选择 Build from Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 2014-02-28
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多