Заголовки Clang и C ++ 11

Я пытаюсь заставить Clang работать на Windows, чтобы в конечном итоге разработать с Qt Creator, чтобы увидеть, является ли это жизнеспособной альтернативой Visual Studio.

Я получил LLVM и Clang 3.2 (SVN Revision 163238) для компиляции с использованием MinGW w64 (mingw-w64-bin_i686-mingw_20111220.zip), а также указал на каталоги заголовков gcc на C ++, добавив AddMinGWCPlusPlusIncludePaths("D:/Code/mingw/lib/gcc", "x86_64-w64-mingw32", "4.7.0"); в clang/lib/Frontend/InitHeaderSearch.cppХотя я думаю, что это не самый современный метод. Во всяком случае, Clang, кажется, находит большинство из этих заголовков.

Однако при компиляции простого Hello World:

#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "test\n";
return 0;
}

с помощью clang++ main.cpp Я получаю эту ошибку:

In file included from main.cpp:1:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\iostream:39:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\ostream:39:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\ios:39:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\iosfwd:41:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\postypes.h:41:
D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\cwchar:45:10: fatal error:
'wchar.h' file not found

Итак, Clang, по-видимому, находит несколько заголовков C ++, включая iostream но не может найти wchar.h, Получается что wchar.h находится в .../include/c++\tr1 где Clang не ищет это. Перемещение этих заголовков TR1 вверх на один каталог также не помогает.

Что я тут не так сделал? Является ли библиотека gcc C ++ несовместимой с Clang, поскольку, по-видимому, она еще не интегрировала некоторые библиотеки TR1 в стандарт? Где взять совместимую библиотеку C ++ 11 для Clang (для Windows!)?

11

Решение

Вы неправильно настроили / неправильно установили Clang. Вам также необходимо добавить пути MinGW-w64, где-то где вы добавили свою версию.

Используйте готовую версию, которую я приведу с объяснением здесь:
Лязг на винде

Я модифицировал Clang для работы с заголовками MinGW-w64, а также с заголовками GCC 4.6.3 libstdc ++ и библиотеками. В настоящее время он застрял в версии 3.2, но если вы примените аналогичный патч к источникам (из которых, к сожалению, у меня нет файла патча), вы также сможете его использовать.

Тот, который я предоставляю, просто извлекает, добавляет к PATH и использует. И только 32-битный.

Также обратите внимание, что вы используете древнюю версию MinGW-w64 GCC, и вы должны действительно обновить ее.

1

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

Попробуйте загрузить файл «wchar.h» вручную и поместить его в локальный рабочий каталог проекта Visual Studio. Хорошо работает для меня.

0

Если вы пройдете -nostdinc++ чтобы звенеть, вы должны указать точную конфигурацию включений с несколькими -I переключатели. Пытаться -nostdsysteminc -nobuiltininc также.

А также -v должен показать вам, где и в каком порядке он ищет заголовки при компиляции:

clang++ -v -nostdinc++ -ID:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++ -ID:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++/tr1 foo.cpp
0

Я столкнулся с той же проблемой, используя Clang —version 3.4 (198054) и mingw-get.exe —version 0.6.2-beta-20131004-1: оказалось, что я неправильно установил MinGW: изначально я только установил флажок для ‘mingw-gcc-g ++’ в диалоге выбора пакета mingw-get.exe, добавление ‘mingw32-base’ позже решило эту проблему wchar_t.h: clang ++. exe -std = c ++ 11 скомпилированный C ++ 11 iostream Код просто отлично.

0
По вопросам рекламы [email protected]