TL; DR:Как пользоваться усилением ASIO с лязгом/с2
- Кто смог использовать повысить ASIO (повышение версия 1,61) с лязгом/с2 (лязг фронтэндом ++, который интегрирован в VS2015 Обновление 3)?
- Если да, то какие варианты вы использовали?
У меня есть программа, которая использует библиотеку ASIO подталкивание в. Он работает безупречно, когда скомпилирован с MSVC++ (VS2015 Update 3) на Win10 и g ++ 4.8 на Ubuntu 14.04, но я также хотел бы использовать интерфейс clang, который поставляется с более новыми версиями Visual Studio (я считаю, начиная с обновления 1) ,
Мои первоначальные параметры командной строки (скопированные на странице свойств проекта) выглядит следующим образом:
-fpic "stdafx.h" -std=c++1y -fstack-protector "Clang\" -fno-strict-aliasing -ffunction-sections -g2 -gdwarf-2 -O0 -x c++-header -D "_WINSOCK_DEPRECATED_NO_WARNINGS" -D "NOMINMAX" -frtti -fomit-frame-pointer -fdata-sections -fno-ms-compatibility -std=c11 -fexceptions -o "Clang\%(filename).obj" -fms-extensions -fno-short-enums
Который дал мне следующую ошибку:
void __cdecl boost::detail::atomic_increment(struct __clang::_Atomic<int> *)': Unexpected atomic instruction -- use Windows interlock intrinsics
Таким образом, очевидно увеличить устал использовать лязг/gcc intrinsics, которые не поддерживаются версией clang/c2, вместо использования специфичных для окна свойств, которые будут использоваться при компиляции с VC++. Я играл с различными опциями компилятора и единственное, что, казалось, есть какой-то эффект был не-определить символ __clang__
препроцессора (добавив следующий параметр в командной строке):
-U "__clang__"
Это избавившись от атомной ошибки, но теперь я получаю несколько страниц сообщений об ошибках, которые, как представляется, связаны с некоторыми макросами boost mpl. Вот первые несколько строк:
1> In file included from main.cpp:1:
1> In file included from D:\mylibs\boost\include\boost/program_options.hpp:15:
1> In file included from D:\mylibs\boost\include\boost/program_options/options_description.hpp:13:
1> In file included from D:\mylibs\boost\include\boost/program_options/value_semantic.hpp:12:
1> In file included from D:\mylibs\boost\include\boost/any.hpp:20:
1> In file included from D:\mylibs\boost\include\boost/type_index.hpp:29:
1> In file included from D:\mylibs\boost\include\boost/type_index/stl_type_index.hpp:40:
1>D:\mylibs\boost\include\boost/mpl/if.hpp(131,23): error : too many arguments provided to function-like macro invocation
1> BOOST_MPL_AUX_NA_SPEC(3, if_)
1> ^
1> D:\mylibs\boost\include\boost/preprocessor/facilities/expand.hpp(26,10) : note: macro 'BOOST_PP_EXPAND_I' defined here
1> # define BOOST_PP_EXPAND_I(x) x
1> ^
У кого-нибудь есть решение для этого?
Обратите внимание, что мой вопрос заключается не в том, чтобы сами создавать библиотеки boost, как в этом сообщении: Command parameters for b2 in order to build Boost libraries with Microsoft's Clang/C2. И да, я знаю, что официальная поддержка clang/c2 от boost не поддерживается, но мне было интересно, знает ли кто-нибудь хак, который будет создавать правильный набор макросов настройки конфигурации.
Благодарим за внимание. Для целей тестирования я действительно хотел бы взломать заголовки, если кто-то мог бы сказать мне, где именно я должен что-то изменить.Прямо сейчас, для меня просто не важно, чтобы я мог копаться в заголовках конфигурации форсирования самостоятельно, ища правильные определения, если я не знаю, если это вообще возможно в первую очередь. – MikeMB