Обновление до gcc-4.9 сломал clang++
Недавно я обновился до gcc-4.9, но он полностью сломал мой clang ++, и я не могу ничего скомпилировать. Ошибка, которую я получаю:
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;
Вывод 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
Я попытался удалить gcc и clang и установить его снова, но это не помогло. У вас есть предложения как это исправить?
2 ответа
$ 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/ - это файлы из libC++-dev, поэтому нам нужен clang для использования libC++
Простой переключатель компилятора разбирает это
Так что, если вы получаете эту ошибку, добавьте ее в командную строку clang: -stdlib=libC++
В течение многих месяцев существовала давняя ошибка несовместимости ABI между clang и gcc. Проблема сделала невозможным соединение clang с существующими системными библиотеками.
Хорошие новости (по состоянию на 2016-07-27): это было исправлено в Xenial (16.04.1 LTS)
Для интересующихся деталями вышестоящие ошибки: