Po włączeniu C ++ 11 za pomocą stdlibc ++ 4.7, usuń błąd, podczas gdy gcc dobrze się kompiluje
Próbowałem uruchomić C ++ 11, po przejrzeniu różnych stron internetowych i Q / A nadal mam problemy z. Chcę używać clang z libstdc ++. W statusie clang wskazano, że jest on obsługiwany przez patch -http://clang.llvm.org/libstdc++4.7-clang11.patch. Ściągam gcc4.7 z macportów i wprowadzam odpowiednie zmiany w nagłówkach gcc4.7
Powodem, dla którego nie używam libc ++, jest zgodność ABI między libc ++ i libstdc ++, wskazana przez ten wątek:Dlaczego nie można połączyć z libc ++ w trybie c ++ 0x link tego przykładu boost :: program_options?
OK, po zakończeniu wszystkich czynności przetestowałem konfigurację za pomocą następującego kodu:
<code>#include <mutex> #include <thread> int main ( ) { std::mutex myMutext; return 0; } </code>
Oczekuję, że dołączenie powinno działać pod c ++ 11.
Oto, jak go skompilować: z GCC
<code>g++ -std=c++11 -I/opt/local/include/gcc47/c++ -L/opt/local/lib/gcc47 main.cpp -o main </code>
Kompiluj pomyślnie
z Clangiem
<code>clang++ -std=c++11 -I/opt/local/include/gcc47/c++ -L/opt/local/lib/gcc47 main.cpp -o main </code>
Dostaję ten błąd:
<code>@work:boostTest$ clang++ -std=c++11 -I/opt/local/include/gcc47/c++ -L/opt/local/lib/gcc47 main.cpp -o main In file included from main.cpp:1: In file included from /opt/local/include/gcc47/c++/mutex:38: In file included from /opt/local/include/gcc47/c++/tuple:37: In file included from /opt/local/include/gcc47/c++/utility:70: /opt/local/include/gcc47/c++/bits/stl_relops.h:72:3: error: unknown type name '_GLIBCXX_BEGIN_NAMESPACE_VERSION' _GLIBCXX_BEGIN_NAMESPACE_VERSION ^ /opt/local/include/gcc47/c++/bits/stl_relops.h:86:5: error: expected unqualified-id template <class _Tp> ^ In file included from main.cpp:1: In file included from /opt/local/include/gcc47/c++/mutex:38: In file included from /opt/local/include/gcc47/c++/tuple:37: In file included from /opt/local/include/gcc47/c++/utility:71: In file included from /opt/local/include/gcc47/c++/bits/stl_pair.h:61: /opt/local/include/gcc47/c++/bits/move.h:38:1: error: unknown type name '_GLIBCXX_BEGIN_NAMESPACE_VERSION' _GLIBCXX_BEGIN_NAMESPACE_VERSION ^ /opt/local/include/gcc47/c++/bits/move.h:45:3: error: expected unqualified-id template<typename _Tp> ^ In file included from main.cpp:1: In file included from /opt/local/include/gcc47/c++/mutex:38: In file included from /opt/local/include/gcc47/c++/tuple:37: In file included from /opt/local/include/gcc47/c++/utility:71: In file included from /opt/local/include/gcc47/c++/bits/stl_pair.h:61: In file included from /opt/local/include/gcc47/c++/bits/move.h:57: /opt/local/include/gcc47/c++/type_traits:41:1: error: unknown type name '_GLIBCXX_BEGIN_NAMESPACE_VERSION' _GLIBCXX_BEGIN_NAMESPACE_VERSION ^ /opt/local/include/gcc47/c++/type_traits:55:3: error: expected unqualified-id template<typename _Tp, _Tp __v> ^ /opt/local/include/gcc47/c++/type_traits:65:11: error: unknown type name 'integral_constant' typedef integral_constant<bool, true> true_type; ^ /opt/local/include/gcc47/c++/type_traits:65:28: error: expected unqualified-id typedef integral_constant<bool, true> true_type; ^ /opt/local/include/gcc47/c++/type_traits:68:11: error: unknown type name 'integral_constant' typedef integral_constant<bool, false> false_type; ^ /opt/local/include/gcc47/c++/type_traits:68:28: error: expected unqualified-id typedef integral_constant<bool, false> false_type; ^ /opt/local/include/gcc47/c++/type_traits:71:36: error: expected ';' after top level declarator constexpr _Tp integral_constant<_Tp, __v>::value; ^ /opt/local/include/gcc47/c++/type_traits:83:14: error: expected class name : public false_type ^ /opt/local/include/gcc47/c++/type_traits:106:14: error: expected class name : public true_type ^ /opt/local/include/gcc47/c++/type_traits:126:14: error: unknown template name 'integral_constant' : public integral_constant<bool, !_Pp::value> ^ /opt/local/include/gcc47/c++/type_traits:126:38: error: expected class name : public integral_constant<bool, !_Pp::value> ^ /opt/local/include/gcc47/c++/type_traits:142:14: error: expected class name : public false_type { }; ^ /opt/local/include/gcc47/c++/type_traits:146:14: error: expected class name : public true_type { }; ^ /opt/local/include/gcc47/c++/type_traits:151:14: error: unknown template name 'integral_constant' : public integral_constant<bool, (__is_void_helper<typename ^ /opt/local/include/gcc47/c++/type_traits:151:38: error: expected class name : public integral_constant<bool, (__is_void_helper<typename ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. </code>
Używam wersji clang:
<code>Apple clang version 4.0 (tags/Apple/clang-418.2.41) (based on LLVM 3.1svn) Target: x86_64-apple-darwin11.3.0 Thread model: posix </code>
czy robię coś źle? czy jest to problem z najnowszym gcc 4.7 libstc ++?