Getting Clang to work on windows

Wykonałem następujący przewodnik krok po kroku i udało mi się, po odrobinie bałaganu, zmusić clang do kompilacji przy użyciu code:blocks i MinGW. Świetnie, więc teraz mogę dodać moduł Clang do eclipse (po co mieć jedno IDE, skoro można mieć cztery) i rozpocząć kompilację.

Mogę skompilować prosty program, który nie używa standardowej biblioteki, ale niestety, gdy próbuję skompilować to:

#include <iostream>
using namespace std;

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

Po pierwsze rozumiem to:

..\ src \ test.w tym celu prosimy o zapoznanie się z naszą polityką prywatności.]}

Więc dodaję nagłówki Mingw do ścieżki include; potem dostaję to:

'fatal error:' bits / C++config.plik h nie znaleziono '

Co jest dziwne. Dlaczego MinGW działa, jeśli ten plik nie jest w ' bits/'? Czy jest wbudowany w kompilator?. Nieważne, znajduję jego implementację i tworzę plik w ' bits/'.

Potem dostaję całą burzę błędów, w tym dziwnych, które wydaje się sugerować, że albo clang nie implementuje preprocesora poprawnie, albo moje zrozumienie preprocesora jest błędne.

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
I wiele innych. Powinno być
#if defined(_GLIBCXX_HAVE_WCHAR_H) 

Lub

#ifdef _GLIBCXX_HAVE_WCHAR_H?

Jeśli są to biblioteki standardowe MinGW są błędne.

Zakładam, że nie mam racji zakładając, że clang może zostać wrzucony w miejsce gcc i że nie jest zaprojektowany do pracy ze standardowymi bibliotekami gnu. Wszelkie potwierdzenie lub zaprzeczenie tego, poparte dowody będą mile widziane!

Czy ktoś ma niezawodny sposób na kompilację clang na komputerze z systemem Windows? W Internecie brakuje informacji na temat clang, a zwłaszcza na temat windows. [4]}jestem bardzo chętny do pracy clang i LLVM, ponieważ brzmią świetnie z tego, co czytałem. Każda pomoc będzie mile widziana. Dzięki.
Author: Name is carl, 2011-06-29

7 answers

Na tej stronie (ukryta w części "Clang Development" na pasku bocznym) znajduje się instrukcja budowania clang...). Dla MinGW potrzebna jest sekcja o nazwie "na systemach uniksopodobnych". Jedyną trudną częścią jest krok 5, który mówi ci, jak skonfigurować ścieżki dla standardowej biblioteki C++. Należy je dodać do kodu w clang/lib/Frontend/InitHeaderSearch.cpp. Na mojej maszynie wyglądało to tak

// 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);
Chociaż nie jestem pewien, czy wszystkie są potrzebne!
 20
Author: Mike Dinsdale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-29 18:51:50

W zależności od wersji MinGW (a więc wersji GCC), nagłówki mogą być nieco rozproszone...

W pliku clang/lib/Frontend/InitHeaderSearch.cpp znajdziesz wiele mocno zakodowanych ścieżek. Problem w tym, że każda z wersji jest specyficzna, więc jeśli nie ma tam Twojej wersji MinGW, możesz ją dodać (i poprosić o zintegrowanie jej z clang ' s mainline, wysyłając łatkę do CFE-commit).

Osobiście uruchamiam go na MinGW/msys tylko z drobnymi problemami (szereg przypadków testowych nie ponieważ moja powłoka msys zniekształca wejście, gdy są : w...), Nie próbowałem go używać z CodeBlocks chociaż (jestem przyzwyczajony do wiersza poleceń).

Jeśli chcesz pomóc, Takumi czuwa nad integracją MinGW, Francois Pichet prowadzi prace nad kompatybilnością z nagłówkami VC++/MFC (ie jest głównym współautorem), a @ rubenvb obecnie próbuje wypchnąć łatki na libc++, aby działały na Windows (libc++ nie kompiluje się jeszcze na Windows). 3 obszary są ładne dużo niezależne i wymagają różnych umiejętności i wiedzy.

 5
Author: Matthieu M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:44

Miałem podobny problem. Użyłem analogów ścieżek GCC 4.7 podanych przez odpowiedź Mike 'a Dinsdale' a i podałem je z flagą '- isystem' (Clang 3.2 w dystrybucji mingw64 zbudowanej przez rubenvb) do wszystkich moich przyszłych wywołań do pliku wykonywalnego clang (poprzez Skrypty). Ponieważ katalogi te są jawnie określone jako katalogi inkluzji system, wszystkie potencjalnie zużywające się ostrzeżenia generowane przez nie są automatycznie tłumione.

Tl; dr: the -isystem znacznik określa system katalogi inkluzji bez rekompilacji w Clang

 5
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 08:18:05

Clang ma zakodowane na twardo lokalizacje wyszukiwania, zdefiniowane w pliku clang/lib/Frontend/InitHeaderSearch.cpp, w pobliżu komentarza FIXME: temporary hack: hard-coded paths.

Na tej stronie jest notka o tym: http://clang.llvm.org/get_started.html

Więc pobierz ścieżki include z innego kompilatora (MingW) i Zakoduj je na twardo do Clang, a to może zadziałać. (Nie jestem pewien, czy wsparcie Clang Dla Windows jest jeszcze 100%)

 4
Author: jalf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-29 18:51:17

Mam ten sam błąd z Fedora Linux. Sugerowaną poprawką było uzyskanie późniejszej wersji Clang (używałem 2.8) lub nawet skompilowanie go z bagażnika. Nie próbowałem.

 1
Author: Nemanja Trifunovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-29 18:42:57

Windows 10 / VS 2017 / Clang 4.0.0 brak stdlib.h w kodzie C. Tak to rozwiązałem:

  • Otwórz x86_x64 Cross Tools Command Prompt for VS 2015/2016/2017. Uruchomienie clang tutaj powinno wyeliminować błąd "brakujące nagłówki".
  • jeśli nadal nie działa, brakuje ci rzeczywistych nagłówków i / lub bibliotek, ponieważ clang pozostawia te szczegóły platformy VS lub MinGW. Przejdź do \Program Files (x86)\Windows Kits\10\Include\ i przeszukaj jego podkatalogi (jeśli istnieją) pod kątem stdlib.h i co. Jeśli nie znaleziono, musisz zainstalować najnowszą wersję Windows 10 SDK, przechodząc do Visual Studio (instalator) i klikając Modyfikuj {[7] } aby dodać pakiety.
 1
Author: Arcane Engineer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-06 05:40:46

Kiedy miałem ten sam problem, po prostu ustawiłem bloki kodu do odpowiednich katalogów include dla mojej konfiguracji. I używa-ja z clang++ i wszystko do tej pory działało świetnie.

 0
Author: Chawathe Vipul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-04 12:36:17