Заголовки 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), а также указал на каталоги заголовков c++ gcc, добавив AddMinGWCPlusPlusIncludePaths("D:/Code/mingw/lib/gcc", "x86_64-w64-mingw32", "4.7.0"); to clang/lib/Frontend/InitHeaderSearch.cpp, хотя я думаю, что это может быть не самый современный метод. В любом случае, Clang, кажется, находит большинство из них заголовки.

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

#include <iostream>
int main(int argc, char* argv[])
{
  std::cout << "testn";
  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!)?

4 ответов


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

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

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

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

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


попробуйте загрузить "wchar.h " вручную и размещение его в локальном рабочем каталоге проекта visual studio. Мне это подходит.


если вы передадите -nostdinc++ для clang вы должны иметь возможность указать его на точную конфигурацию включает с несколькими -I переключатели. Попробуй!--3--> как хорошо.

и -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 просто отлично.