41 votes

Faire travailler Clang sur Windows

J'ai suivi la suite de l'étape par guide pas à pas et j'ai réussi, après un peu de batailler, pour obtenir clang pour le compiler avec code:blocks et MinGW. Grande, de sorte que maintenant, je pourrais ajouter le Cliquetis module eclipse (pourquoi avoir une IDE de quand vous pouvez avoir quatre) et de lancer la compilation.

Je peux compiler un programme simple qui n'utilise pas la bibliothèque standard, mais malheureusement, lorsque j'essaie de compiler ce:

#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.rpc:9:10: fatale erreur: "iostream" fichier non trouvé

j'ai donc ajouter le Mingw-têtes sur le chemin de l'; puis-je obtenir ceci:

fatale erreur: 'bits/c++config.h' fichier non trouvé"

ce qui est étrange. Pourquoi ne MingW travail si ce fichier n'est pas en bits/'? Est-elle intégrée dans le compilateur?. Jamais l'esprit, je trouve une mise en œuvre et de créer le fichier en bits/'.

Puis-je obtenir toute une tempête d'erreurs, y compris étrange celles qui semblent suggérer clang ne pas mettre en œuvre le préprocesseur correctement ou ma compréhension du préprocesseur est incorrect.

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 comme ça. Devraient-ils être

#if defined(_GLIBCXX_HAVE_WCHAR_H) 

ou

#ifdef _GLIBCXX_HAVE_WCHAR_H?

Si elles sont alors la MinGW bibliothèques standard sont mauvais.

Je suppose que je suis incorrect de supposer que clang peut être supprimée pour les remplacer, gcc et qu'il n'est pas conçu pour fonctionner avec la gnu bibliothèques standard. Toute confirmation ou le refus de cette, appuyés par des éléments de preuve serait la bienvenue!

Donc, quelqu'un at-il un moyen infaillible pour obtenir clang la compilation sur un PC Windows? Il y a un manque d'information en ligne concernant les clang et surtout sur windows.

Je suis vraiment désireux d'obtenir clang et LLVM de travail comme ils le son grand, de ce que j'ai lu. Toute aide serait appréciée.

Merci.

21voto

Mike Dinsdale Points 1066

Il y a des instructions pour la construction d' clang sur cette page (caché dans le "Bruit de Développement" 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 pour le C++ de la bibliothèque standard. Ces le besoin d'être ajouté dans le code en clang/lib/Frontend/InitHeaderSearch.cpp. Sur ma machine cela fini par ressembler à cela

// 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);

si je ne suis pas certain que tous ces sont nécessaires!

6voto

Matthieu M. Points 101624

Selon votre version d' MinGW (et donc la version de gcc portage), les en-têtes peuvent être dispersées un peu...

Dans le fichier clang/lib/Frontend/InitHeaderSearch.cpp vous trouverez un certain nombre de codé en dur des chemins. Le problème, c'est que chacun est spécifique à une version, donc si votre version de MinGW n'est pas là, alors n'hésitez pas à l'ajouter (et demander à être intégrés dans Clang principal en publiant le patch de la cfe-commit).

Personnellement je l'exécute sur MinGW/msys avec uniquement des problèmes mineurs (un certain nombre de cas de test échoue car mon shell de msys mangles l'entrée quand il y a des : in...), je n'ai pas essayé de l'utiliser à partir CodeBlocks bien (je suis habitué à la ligne de commande).

Si vous souhaitez aider, Takumi est de regarder plus de MinGW intégration, François Pichet dirige le travail sur la compatibilité avec VC++/MFC-têtes (c'est à dire est le principal contributeur) et @rubenvb est actuellement en essayant de repousser les taches sur de la libc++ d'avoir de travail sur Windows (libc++ ne compile pas sur Windows pour le moment). Les 3 zones sont à peu près indépendants et nécessitent des compétences différentes et des connaissances.

5voto

user Points 610

J'ai eu un problème similaire. J'ai utilisé la GCC 4.7 de l'analogues des chemins spécifiés par Mike Dinsdale réponse et spécifié avec l'option '-isystem de " drapeau (Clang 3.2 dans le mingw64 de distribution tel que construit par rubenvb) à tous mes futurs appels à la clang exécutable (via des scripts). Comme ces répertoires sont spécifiées explicitement en tant que système d'inclusion répertoires, tous potentiellement pénible avertissements générés par ceux-ci sont automatiquement supprimées.

tl;dr: la -isystem option spécifie le système de l'inclusion des répertoires sans recompilation dans Clang

4voto

jalf Points 142628

Clang a des emplacements de recherche codés en dur, tels que définis dans le fichier clang/lib/Frontend/InitHeaderSearch.cpp , proches 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 dur dans Clang, et cela pourrait fonctionner. (Je ne suis pas sûr que le support Windows de Clang soit encore à 100%)

1voto

Nemanja Trifunovic Points 17239

J'ai eu la même erreur avec Fedora Linux. La solution suggérée consistait à obtenir une version ultérieure de Clang (j'utilisais la version 2.8) ou même à la compiler à partir du coffre. Je n'ai pas essayé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X