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