Clang на Cygwin с C ++ 11

Я установил Clang на Cygwin и пытаюсь скомпилировать этот код:

#include <iostream>
int main() {
std::cout << "hello world!" << std::endl;
return 0;
}

Это прекрасно работает, если я делаю clang++ file.cpp, Это не работает, если я делаю clang++ file.cpp -std=c++11, Я получаю ошибки от стандартных заголовков, как это:

In file included from file.cpp:1:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/iostream:39:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ostream:39:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ios:39:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/exception:150:
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/exception_ptr.h:132:13: error:
unknown type name 'type_info'
const type_info*

Cygwin Clang просто не работает с включенным C ++ 11, или я могу что-то сделать, чтобы обойти это?

6

Решение

Похоже, ошибка в стандартной библиотеке. exception_ptr.h включен только в режиме C ++ 11, поэтому иначе вы его не увидите. Проблема в том, что, как и говорится в ошибке, std :: type_info не объявлено. Кажется, что GCC волшебным образом объявляет определенные имена в пространстве имен std, поэтому на него это не влияет! Вы можете доказать это сами с помощью простой программы:

namespace std {

class A
{
public:
type_info* B();
};
}

Это компилируется с GCC 4.5.3, но Clang выдает ошибку независимо от значения параметра -std.

Проблема исправлена ​​в последней версии GCC, поэтому обновление вручную, вероятно, является лучшим выбором. Релиз 4.7.2, настроенный с параметром —enable-languages ​​= c, c ++, не компилирует никаких проблем в Cygwin.

5

Другие решения

Можно и сравнительно легко заставить работать пакет Clang на Cygwin с C ++ 11.

Ошибка, которую вы описываете, например, исправлена ​​добавлением

#ifdef __clang__
class type_info;
#endif

в exception_ptr.h, Другая ошибка, которую необходимо исправить, — добавить конструктор копирования в std::pair,

Это, к сожалению, и, надеюсь, пакеты gcc Cyginw будут обновлены до более новой версии стандартной библиотеки C ++.

4

Я думаю, что по умолчанию Clang в Windows будет использовать режим MS-совместимости и MS-расширений. Эти и другие значения по умолчанию в Windows могут не подходить для Cygwin.

Использовать -### флаг, чтобы получить фактические параметры, передаваемые от драйвера к компилятору, чтобы вы могли попробовать настроить их.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector