Получение Clang для работы над окнами

Я выполнил следующее пошаговое руководство, и после нескольких попыток я сумел собрать компиляцию с использованием блоков кода и MinGW. Отлично, поэтому теперь я могу добавить модуль Clang для затмения (почему есть одна среда IDE, когда у вас может быть четыре) и начать компиляцию.

Я могу скомпилировать простую программу, которая не использует стандартную библиотеку, но, к сожалению, когда я пытаюсь ее скомпилировать:

#include <iostream>
using namespace std;

int main()
{
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}

в первую очередь я получаю это:

..\src\test.cpp: 9: 10: фатальная ошибка: файл "iostream" не найден

поэтому я добавляю заголовки Mingw в путь включения; то я получаю следующее:

'фатальная ошибка: файл' bits/С++ config.h ' не найден '

что странно. Почему MingW работает, если этот файл не находится в 'bits/'? Он встроен в компилятор?. Неважно, я нахожу его реализацию и создаю файл в 'bits/'.

Затем я получаю целый шторм ошибок, включая странные, которые, как представляется, предполагают, что либо clang не реализует препроцессор правильно, либо мое понимание препроцессора неверно.

C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.4.1\include\c++/cwchar:45:26: error: expected value in expression
#if _GLIBCXX_HAVE_WCHAR_H

и многое другое. Если это будет

#if defined(_GLIBCXX_HAVE_WCHAR_H) 

или

#ifdef _GLIBCXX_HAVE_WCHAR_H?

Если они тогда, стандартные библиотеки MinGW ошибочны.

Я предполагаю, что я ошибаюсь в предположении, что clang можно отбросить, чтобы заменить gcc, и что он не предназначен для работы с стандартными библиотеками gnu. Любое подтверждение или отрицание этого, подкрепленное доказательствами, было бы очень желанным!

Итак, есть ли у кого-нибудь надежный способ получить компиляцию clang на ПК с Windows? Там недостаток информации в Интернете относительно clang и особенно в отношении окон.

Я очень заинтересован в том, чтобы заставить Clang и LLVM работать, поскольку они отлично звучат из того, что я читал. Любая помощь будет оценена.

Спасибо.

Ответы

Ответ 1

Здесь есть инструкции по построению clang на этой странице (скрыта в разделе "Clang Development" на боковой панели...). Для MinGW вам нужен раздел "On Unix-подобные системы". Единственная сложная часть - это шаг 5, который рассказывает вам, как настраивать пути для стандартной библиотеки С++. Их необходимо добавить в код в clang/lib/Frontend/InitHeaderSearch.cpp. На моей машине это выглядело так:

// FIXME: temporary hack: hard-coded paths.
AddPath("/usr/local/include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/mingw32", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/backward", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include-fixed", System, true, false, false);

хотя я не уверен, что все это необходимо!

Ответ 2

В зависимости от вашей версии MinGW (и, следовательно, версии gcc-ported) заголовки могут быть немного разбросаны...

В файле clang/lib/Frontend/InitHeaderSearch.cpp вы найдете несколько жестко закодированных путей. Проблема в том, что каждая из них зависит от версии, поэтому, если ваша версия MinGW там отсутствует, тогда не стесняйтесь ее добавлять (и попросите ее интегрироваться в основную сеть Clang, опубликовав патч для cfe-commit).

Лично я запускаю его на MinGW/msys только с незначительными проблемами (из-за ошибки в нескольких тестах, потому что моя оболочка msys управляет вводом, когда есть : in...), я не пробовал использовать его из CodeBlocks, хотя (Я привык к командной строке).

Если вы хотите помочь, Takumi наблюдает за интеграцией MinGW, Франсуа Пичет возглавляет работу по совместимости с заголовками VС++/MFC (т.е. является основным вкладчиком) и @rubenvb в настоящее время пытается наложить исправления на libС++, чтобы он работал на Windows (libС++ еще не компилируется в Windows). 3 области в значительной степени независимы и требуют разных навыков и знаний.

Ответ 3

У меня была аналогичная проблема. Я использовал аналоги GCC 4.7 путей, указанных Майком Динсдейлом, и указал им флаг "-системы" (Clang 3.2 в дистрибутиве mingw64, созданный rubenvb) ко всем моим будущим вызовам исполняемого файла clang (через скрипты), Поскольку эти каталоги указаны явно как каталоги включения системы, все потенциально утомительные предупреждения, генерируемые ими, автоматически подавляются.

tl; dr: флаг -система указывает каталоги включения системы без перекомпиляции в Clang

Ответ 4

У Clang есть фиксированные местоположения поиска, как определено в файле clang/lib/Frontend/InitHeaderSearch.cpp, рядом с комментарием FIXME: temporary hack: hard-coded paths.

Здесь есть заметка об этом на этой странице: http://clang.llvm.org/get_started.html

Итак, получите пути включения из вашего другого компилятора (MingW) и скопируйте их в Clang, и это может сработать. (Я не уверен, что поддержка Clang Windows на 100% еще там)

Ответ 5

Я получил ту же ошибку с Fedora Linux. Предлагаемое исправление заключалось в том, чтобы получить более позднюю версию Clang (я использовал 2.8) или даже скомпилировать ее из туловища. Не пробовал.

Ответ 6

Когда у меня была такая же проблема, я просто установил блоки кода в правильные каталоги include для моей настройки. И он использует -I с clang++ и все работает отлично до сих пор.

Ответ 7

Windows 10/VS 2017/Clang 4.0.0 отсутствует stdlib.h в коде C. Вот как я это решил:

  • Откройте x86_x64 Cross Tools Command Prompt for VS 2015/2016/2017. Запуск clang здесь должен устранить ошибку "недостающих заголовков".
  • Если вы все еще не работаете, вам не хватает фактических заголовков и/или библиотек, поскольку Clang оставляет эту специфику для платформы VS или MinGW. Перейдите в \Program Files (x86)\Windows Kits\10\Include\ и найдите его подкаталоги (если есть) для stdlib.h и co. Если вы не нашли, вам нужно будет установить последний Windows 10 SDK, перейдя в Visual Studio (установщик) и нажав Изменить, чтобы добавить пакеты.