- при компиляции приложений С++, нормально компилирующихся GCC, компилятором Clang ...
Код: Выделить всё
bash-4.2$ gcc --version
gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
Copyright (C) 2012 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая
коммерческую ценность и применимость для каких-либо целей.
bash-4.2$ clang --version
clang version 3.0 (tags/RELEASE_30/final)
Target: i386-redhat-linux-gnu
Thread model: posix
- вылазят очень странные ошибки, типа:
Код: Выделить всё
bash-4.2$ make
clang++ -xc++ hello.cc -o hellocc
In file included from hello.cc:1:
In file included from /usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ostream:39:
In file included from /usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ios:42:
In file included from /usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/ios_base.h:40:
/usr/bin/../lib/gcc/i686-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ext/atomicity.h:48:45: error: use of undeclared
identifier '__ATOMIC_ACQ_REL'
{ return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
- такие сообщения довольно много обсуждаются на англоязычных блогах ... на русских не встречал...
- понятно, что это ругань на заголовочные файлы GCC, и относятся они к <iostream> ...
- если записать начальные include как-то так:
Код: Выделить всё
#include <cstdlib>
#undef _GLIBCXX_ATOMIC_BUILTINS
#include <iostream>
- то ошибки прекращаются и сборка идёт до конца.
Что это? как это понимать? (эффект конкретных версий GCC & Clang)
Поскольку Clang всё-равно заменит GCC повсеместно, рано или поздно, предлагаю сюда скидывать вопросы по несовместимости проектов GCC & Clang, которые у кого будут наблюдаться.
Нужно готовиться загодя