2016-07-12 2 views
1

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 не поддерживается, но мне было интересно, знает ли кто-нибудь хак, который будет создавать правильный набор макросов настройки конфигурации.

ответ

5

Получение BOOST заголовков для компиляции чисто с Clang/C2 имеет решающее значение для создания Clang/C2 полезно, поэтому мы работаем над поддержкой для Clang-style атомных встроенных функций. Они будут доступны в будущем обновлении Clang/C2.

Я не знаю способа убедить подталкивание использовать MSVC версию встроенных функций в то же время компиляции с Clang, если вы не готовы взломать заголовки Boost.

+0

Благодарим за внимание. Для целей тестирования я действительно хотел бы взломать заголовки, если кто-то мог бы сказать мне, где именно я должен что-то изменить.Прямо сейчас, для меня просто не важно, чтобы я мог копаться в заголовках конфигурации форсирования самостоятельно, ища правильные определения, если я не знаю, если это вообще возможно в первую очередь. – MikeMB

1

Попробуйте определить макрос BOOST_SP_USE_STD_ATOMIC в настройках вашего компилятора или непосредственно перед вами #include любые заголовки Boost.