Заголовки Clang и С++ 11
Я пытаюсь заставить Clang работать в Windows, чтобы в итоге разработать с Qt Creator, чтобы убедиться, что это жизнеспособная альтернатива Visual Studio.
Я получил LLVM и Clang 3.2 (SVN Revision 163238) для компиляции с помощью MinGW w64 (mingw-w64-bin_i686-mingw_20111220.zip) и также указывал на каталоги заголовков gcc С++, добавляя AddMinGWCPlusPlusIncludePaths("D:/Code/mingw/lib/gcc", "x86_64-w64-mingw32", "4.7.0");
to clang/lib/Frontend/InitHeaderSearch.cpp
, хотя я думаю, что это может быть не самый современный метод. В любом случае, Кланг, похоже, находит большинство этих заголовков.
Однако при компиляции простого 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, по-видимому, находит несколько заголовков С++, включая iostream
, но не находит wchar.h
. Оказывается, что wchar.h
находится в .../include/c++\tr1
, где Clang не ищет его. Перемещение этих заголовков TR1 вверх по одному каталогу также не помогает.
Что я сделал здесь неправильно? Является ли библиотека gcc С++ несовместимой с Clang, поскольку, по-видимому, она до сих пор не интегрировала некоторые библиотеки TR1 в стандарт? Где я могу получить совместимую библиотеку С++ 11 для Clang (для Windows!)?
Ответы
Ответ 1
Вы неправильно настроили/упустили Кланг. Вам также нужно добавить пути MinGW-w64, где-то там, где вы добавили свою версию.
Используйте предварительную версию, которую я предоставляю с объяснением здесь:
Clang в Windows
Я модифицировал Clang для работы с заголовками MinGW-w64 и заголовками и библиотеками GCC 4.6.3 libstdС++. В настоящее время он застрял в версии 3.2, но если вы примените аналогичный патч к источникам (к сожалению, у меня нет файла исправлений), вы также сможете его использовать.
Тот, который я предоставляю, это просто извлечь, добавить в PATH и использовать. И только 32-бит.
Также обратите внимание, что вы используете древнюю версию GCC MinGW-w64, и вы должны действительно обновить ее.
Ответ 2
Попробуйте загрузить "wchar.h" вручную и поместив его в свой локальный рабочий каталог проекта вашей визуальной студии. Хорошо работает для меня.
Ответ 3
Если вы передадите -nostdinc++
в clang, вы должны указать его на точную конфигурацию включений с несколькими переключателями -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
Ответ 4
Я столкнулся с той же проблемой, используя 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 = С++ 11 скомпилировал C + +11 код iostream просто отлично.