Я пытаюсь заставить 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!)?
Вы неправильно настроили / неправильно установили Clang. Вам также необходимо добавить пути MinGW-w64, где-то где вы добавили свою версию.
Используйте готовую версию, которую я приведу с объяснением здесь:
Лязг на винде
Я модифицировал Clang для работы с заголовками MinGW-w64, а также с заголовками GCC 4.6.3 libstdc ++ и библиотеками. В настоящее время он застрял в версии 3.2, но если вы примените аналогичный патч к источникам (из которых, к сожалению, у меня нет файла патча), вы также сможете его использовать.
Тот, который я предоставляю, просто извлекает, добавляет к PATH и использует. И только 32-битный.
Также обратите внимание, что вы используете древнюю версию MinGW-w64 GCC, и вы должны действительно обновить ее.
Попробуйте загрузить файл «wchar.h» вручную и поместить его в локальный рабочий каталог проекта Visual Studio. Хорошо работает для меня.
Если вы пройдете -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
Я столкнулся с той же проблемой, используя 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 Код просто отлично.