J'ai suivi ce qui suit guide étape par étape et j'ai réussi, après un peu de tripotage, à obtenir clang pour compiler en utilisant le code: blocs et MinGW. Super, alors maintenant je pourrais ajouter le module Clang à Eclipse (pourquoi en avoir un IDE quand vous pouvez en avoir quatre) et commencer à compiler.
Je peux compiler un programme simple qui n'utilise pas la bibliothèque standard mais malheureusement quand j'essaye de compiler ceci:
#include <iostream>
using namespace std;
int main()
{
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
tout d'abord, je reçois ceci:
..\src\test.cpp: 9: 10: erreur fatale: fichier 'iostream' introuvable
j'ajoute donc les en-têtes Mingw au chemin d'inclusion; alors je reçois ceci:
'erreur fatale:' bits/c ++ config.h 'fichier introuvable'
ce qui est bizarre. Pourquoi MingW fonctionne-t-il si ce fichier n'est pas en 'bits /'? Est-il intégré au compilateur?. Peu importe, j'en trouve une implémentation et crée le fichier en 'bits /'.
Ensuite, je reçois toute une tempête d'erreurs, y compris d'étranges qui semblent suggérer que clang n'implémente pas correctement le préprocesseur ou bien ma compréhension du préprocesseur est incorrecte.
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
et beaucoup plus comme ça. Devrait-ce être
#if defined(_GLIBCXX_HAVE_WCHAR_H)
ou
#ifdef _GLIBCXX_HAVE_WCHAR_H?
S'ils le sont, les bibliothèques standard MinGW sont incorrectes.
Je suppose que je me trompe en supposant que clang peut être déposé pour remplacer gcc et qu'il n'est pas conçu pour fonctionner avec les bibliothèques standard gnu. Toute confirmation ou refus de cela, étayé par des preuves, serait le bienvenu!
Alors, quelqu'un a-t-il un moyen infaillible d'obtenir la compilation de clang sur un PC Windows? Il y a une pénurie d'informations en ligne concernant le clang et surtout les fenêtres.
Je suis vraiment impatient de faire fonctionner le clang et le LLVM car ils sonnent très bien d'après ce que j'ai lu. Toute aide serait appréciée.
Merci.
Il y a quelques instructions pour construire clang
sur cette page (caché dans la partie "Clang Development" de la barre latérale ...). Pour MinGW, vous voulez la section intitulée "Sur les systèmes de type Unix". La seule partie délicate est l'étape 5 qui vous indique comment configurer les chemins d'accès à la bibliothèque standard C++. Ceux-ci doivent être ajoutés au code dans clang/lib/Frontend/InitHeaderSearch.cpp
. Sur ma machine, ça ressemblait à ça
// 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);
mais je ne suis pas sûr que tout cela soit nécessaire!
Selon votre version de MinGW
(et donc la version de gcc portée), les en-têtes peuvent être un peu dispersés ...
Dans le fichier clang/lib/Frontend/InitHeaderSearch.cpp
vous trouverez un certain nombre de chemins codés en dur. Le problème est que chacun est spécifique à la version, donc si votre version de MinGW n'est pas là, alors n'hésitez pas à l'ajouter (et demandez à ce qu'elle soit intégrée dans la ligne principale de Clang en publiant le patch sur cfe-commit).
Personnellement, je l'exécute sur MinGW/msys avec seulement des problèmes mineurs (un certain nombre de cas de test échouent parce que mon shell msys gêne l'entrée lorsqu'il y a :
in ...), je n'ai pas essayé de l'utiliser depuis CodeBlocks (j'ai l'habitude de la ligne de commande).
Si vous souhaitez aider, Takumi veille à l'intégration de MinGW, François Pichet dirige les travaux sur la compatibilité avec les en-têtes VC++/MFC (c'est-à-dire est le principal contributeur) et @ rubenvb essaie actuellement de pousser les correctifs sur libc ++ pour le faire fonctionner sous Windows (libc ++ ne compile pas encore sous Windows). Les 3 domaines sont à peu près indépendants et nécessitent des compétences et des connaissances différentes.
J'avais un problème similaire. J'ai utilisé les analogues de GCC 4.7 des chemins spécifiés par la réponse de Mike Dinsdale et les ai spécifiés avec le drapeau '-isystem' (Clang 3.2 dans la distribution mingw64 comme construit par rubenvb) pour tous mes futurs appels à l'exécutable clang (via scripts). Comme ces répertoires sont spécifiés explicitement en tant que répertoires d'inclusion système , tous les avertissements potentiellement fatigants qu'ils génèrent sont automatiquement supprimés.
tl; dr: l'indicateur - isystem spécifie le système les répertoires d'inclusion sans recompilation à Clang
Clang possède des emplacements de recherche codés en dur, tels que définis dans le fichier clang/lib/Frontend/InitHeaderSearch.cpp
, près du commentaire FIXME: temporary hack: hard-coded paths
.
Il y a une note à ce sujet sur cette page: http://clang.llvm.org/get_started.html
Obtenez donc les chemins d'inclusion de votre autre compilateur (MingW), et codez-les en Clang, et cela pourrait fonctionner. (Je ne sais pas si le support Windows de Clang est encore à 100%)
Windows 10/VS 2017/Clang 4.0.0 stdlib.h
Manquant dans le code C. Voici comment je l'ai résolu:
x86_x64 Cross Tools Command Prompt for VS 2015/2016/2017
. Exécuter clang ici devrait éliminer l'erreur "en-têtes manquants".\Program Files (x86)\Windows Kits\10\Include\
et recherchez ses sous-répertoires (le cas échéant) pour stdlib.h
Et co. S'il n'est pas trouvé, vous devrez installer le dernier Windows 10 SDK
En allant dans Visual Studio (programme d'installation) et en cliquant sur Modifier pour ajouter des packages.Lorsque j'ai eu le même problème, j'ai simplement configuré les blocs de code dans les répertoires d'inclusion corrects pour ma configuration. Et il utilise -I avec clang ++ et tout fonctionne très bien jusqu'à présent.