使用Visual Studio 2013(Express)构建强大功能

时间:2013-12-28 09:48:38

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

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

我很困惑这是否可能,正如Boost网站所说:

  

使用Visual Studio 2013 / Visual C ++ 12进行已知错误。

     

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

     

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

     

使用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,但我确实至少得到了序列化错误。

2 个答案:

答案 0 :(得分:18)

我最近使用一个小补丁在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)

答案 1 :(得分:1)

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

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

enter image description here