Подтвердить что ты не робот

Повышение производительности с помощью Visual Studio 2013 (Express)

Кто-нибудь успешно создал Boost с помощью Visual Studio 2013 Express?

Я в замешательстве относительно того, возможно ли это, пока на веб-сайте Boost указано:

Известные ошибки с Visual Studio 2013/Visual С++ 12.

Visual Studio 2013 был выпущен довольно поздно в процессе выпуска, поэтому существует несколько нерешенных проблем. К ним относятся:

Сериализация не может скомпилироваться из-за отсутствия include.

Использование has_member_function_callable_with из Boost.Container allocator_traits вызывает ошибку компиляции (# 9332).

В таких библиотеках, как Unordered и MultiIndex, вызов перегруженных функций с помощью списков инициализаторов может привести к ошибке компиляции, а Visual С++ утверждает, что перегрузки неоднозначны. Это ошибка Visual С++, и неясно, есть ли хороший способ обхода проблемы. Это не повлияет на код, который не использует списки инициализаторов, или использует список инициализаций, который не требует неявного преобразования (т.е. Список инициализаторов типа точного значения контейнера).

Тема: ex_scoped_thread скомпилирует сбой (# 9333).

Однако этот плакат говорит, что можно создать Boost 1.55.0 с использованием VS 2013 без каких-либо патчей.

Я попытался создать Boost с использованием VS 2013, и я действительно получил хотя бы ошибку Serialization.

4b9b3361

Ответ 1

Недавно я создал Boost на MSVC12 (VS2013), используя только небольшой патч:

Тема: [PATCH] Фиксация строковой сборки на MSVC2013

включить исправление (руководство)
   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. (если у вас есть SDK для Windows)

Ответ 2

Я использую BlueGo для создания исходного источника Boost напрямую, поскольку Boost 1.55.0 не может быть создан с использованием VS2013 без применения патча, но эта ошибка уже исправлена ​​в хранилище boost

Здесь вы можете увидеть скриншот BlueGo - в поле со списком версий вы также можете выбрать Build from Source

enter image description here