Заголовки 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 просто отлично.