TL; DR:Wie Boost verwenden Asio mit Klirren/c2
- Hat Boost Asio (Boost-Version 1.61) mit Klirren/c2 (das Klirren ++ Frontend, das in verwenden, jemand in der Lage integriert ist VS2015 Update 3)?
- Wenn ja, welche Optionen haben Sie benutzt?
Ich habe ein Programm, das Auftrieb der Asio-Bibliothek verwendet. Es funktioniert fehlerfrei, wenn es mit MSVC++ (VS2015 Update 3) unter Win10 und g ++ 4.8 unter Ubuntu 14.04 kompiliert wird, aber ich würde auch gerne das clang-Frontend verwenden, das mit neueren Versionen von Visual Studio geliefert wird (ich glaube seit Update 1) .
Meine erste Kommandozeilen-Optionen (von der Projekteigenschaften Seite kopiert) sah wie folgt aus:
-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
die mir die folgenden Fehler gab:
void __cdecl boost::detail::atomic_increment(struct __clang::_Atomic<int> *)': Unexpected atomic instruction -- use Windows interlock intrinsics
So offenbar müde steigern Klirren zu verwenden/gcc intrinsics, die nicht von der clang/c2-Version unterstützt werden, anstatt die Windows-spezifischen intrinsics zu verwenden, die sie verwenden würden, wenn sie mit VC++ kompiliert werden. Ich spielte mit den verschiedenen Compiler-Optionen um und das einzige, was eine Wirkung zu haben schien, war un-definieren den __clang__
Präprozessorsymbol (durch die folgende Option in der Befehlszeile):
-U "__clang__"
die des losgeworden atomarer Fehler, aber jetzt bekomme ich mehrere Seiten mit Fehlermeldungen, die mit einigen Boost-MPL-Makros zu tun haben. Hier sind die ersten Zeilen:
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> ^
Hat jemand eine Lösung dafür?
Beachten Sie, dass meine Frage nicht zum Erstellen der Boost-Bibliotheken selbst wie in diesem Post lautet: Command parameters for b2 in order to build Boost libraries with Microsoft's Clang/C2. Und ja, ich bin mir bewusst, dass es keine offizielle Unterstützung für clang/c2 von Boost gibt, aber ich frage mich, ob jemand einen Hack kennt, der den richtigen Satz von Boost-Konfigurationsmakros erzeugen würde.
Vielen Dank für den Kopf. Zu Testzwecken wäre ich eigentlich bereit, die Header zu hacken, wenn mir jemand genau sagen könnte, wo ich was ändern muss.Gerade jetzt ist es einfach nicht wichtig genug für mich, die Boost-Konfigurations-Header selbst zu durchsuchen, um nach den richtigen Definitionen zu suchen, wenn ich nicht weiß, ob es überhaupt überhaupt möglich ist. – MikeMB