web-dev-qa-db-fra.com

Mise à niveau vers gcc-4.9 rompu ++

Récemment, je suis passé à la version 4.9 de gcc, mais cela a complètement cassé mon clang ++ et je suis incapable de compiler quoi que ce soit. Erreur je reçois:

In file included from src/tester.cpp:11:
In file included from /usr/include/boost/progress.hpp:22:
In file included from /usr/include/boost/timer.hpp:20:
In file included from /usr/include/boost/config.hpp:40:
In file included from /usr/include/boost/config/select_stdlib_config.hpp:18:
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/cstddef:51:11: error: no member named 'max_align_t' in the global namespace
  using ::max_align_t;

Sortie de clang ++ -v:

Ubuntu clang version 3.4-1ubuntu3 (tags/RELEASE_34/final) (based on LLVM 3.4)
Target: x86_64-pc-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.9.1
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8.2
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9.1
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.2
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.1
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9

J'ai essayé de désinstaller gcc et clang et de l'installer à nouveau, mais cela n'a pas aidé. Avez-vous des suggestions pour y remédier?

3
Jendas

$ grep max_align_t /usr/include/c++/* -r
/usr/include/c++/4.9/cstddef: using ::max_align_t; /usr/include/c++/4.9.2/cstddef: using ::max_align_t; /usr/include/c++/v1/cstddef: max_align_t /usr/include/c++/v1/cstddef:typedef long double max_align_t;

/ usr/include/c ++/v1/sont des fichiers de libc ++ - dev, nous avons donc besoin de clang pour utiliser libc ++

Un simple commutateur de compilateur règle ce problème

Donc, si vous obtenez cette erreur, ajoutez ceci à votre ligne de commande clang: -stdlib = libc ++

2
boris

Il y avait un bogue d'incompatibilité ABI de longue date entre clang et gcc depuis plusieurs mois maintenant. Le problème empêchait clang de se connecter aux bibliothèques système existantes.

La bonne nouvelle (à partir du 2016-07-27) est la suivante: corrigé dans Xenial (16.04.1 LTS)

Pour les intéressés dans les détails, les bugs en amont sont:

0
arielf