J'ai essayé de trouver un moyen de faire fonctionner Clang sur Windows, mais j'ai des problèmes. J'obtiens Clang pour compiler avec succès, mais quand j'essaye de compiler un programme j'ai un tas d'erreurs dans les en-têtes standard.
Je connais les excellentes versions préconstruites de rubenvb de clang , mais je veux le compiler pour moi. J'écoutais également les discussions de GoingNative sur clang qui disaient qu'il n'avait pas encore un très bon support Windows. Comment faire fonctionner Clang sous Windows?
J'ai utilisé la méthode suivante pour compiler clang pour C++ sur Windows 7 et elle a été validée par Mysticial et d'autres:
Exécutez la commande cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ..\llvm-3.0.src
(le dernier argument est le chemin d'accès relatif au dossier contenant la source llvm (et la source clang dans le sous-répertoire tools/clang))
Cela fera l'équivalent d'une commande "configure", et les makefiles et tout seront générés dans le dossier de construction
Exécutez la commande mingw32-make
-j<number>
option) Il peut être judicieux de fermer tous les autres programmes pour que votre ordinateur puisse se concentrer et pour qu'ils n'interfèrent pas avec le long processus de compilation, comme mettre un verrou sur un dossier dans lequel le compilateur écrit (c'est arrivé pour moi). J'ai même désactivé mon logiciel antivirus et pare-feu pour qu'ils n'essaient pas d'analyser les fichiers générés et de s'immiscer.Il est temps de le tester
Créez un fichier .cpp dans le dossier build/bin (j'utiliserai hello.cpp). Utilisez un en-tête de bibliothèque standard pour vous assurer que les chemins d'accès et les bibliothèques fonctionnent. Commencez avec un programme très simple.
(Ce avec quoi j'ai commencé:
#include <iostream>
int main() {
std::cout << "hi";
}
)
Exécutez la commande clang hello.cpp -std=c++0x -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++" -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++\mingw32" -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../.. -L/mingw/lib -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt
(-L spécifie un répertoire dans lequel rechercher des bibliothèques et -l spécifie une bibliothèque à lier) (Si MinGW n'est pas installé sur le même chemin que moi, vous pouvez trouver les chemins avec la commande "g ++ somefile. cpp -v "pour que g ++ renverse ses tripes sur les options qu'il utilise pour les chemins de bibliothèque et les fichiers de bibliothèque et tout le reste Recherchez à la fin de la sortie les options -L et -l. Soyez conscient du fichier .o noms qui sont entrecoupés de -L. Clang utilise plusieurs des mêmes options que g ++ donc j'ai littéralement copié et collé cette ligne à partir de la sortie de g ++)
Cela devrait compiler votre programme et produire un fichier nommé a.out
renommer a.out en a.exe ou autre
Clang (3.0) a toujours des problèmes sur Windows (je ne sais pas si ces problèmes sont également sur Linux). Par exemple, la compilation d'un lambda (que clang ne prend pas en charge) avec -std = c ++ 0x provoquera le plantage de clang et émettra une erreur de diagnostic. (J'ai été informé sur le LLVM IRC que c'est parce que clang implémente l'analyse syntaxique pour les lambdas mais pas l'analyse sémantique, qui est la phase dans laquelle il se bloque (parce qu'ils ont oublié de désactiver l'analyse syntaxique des lambdas pour le 3.0) version), et ils connaissent déjà ce bug)
De plus, l'illustre Mysticial a aimablement accepté de tester ce guide et a fait quelques observations lors de ses tests:
Voici ce qui a fonctionné dans mon environnement, sur Windows 8.1, globalement similaire aux instructions de Seth, mais avec des outils plus récents.
C:/MinGW
, pour être précis, j'ai utilisé distribution STL .cmake -G "MinGW Makefiles" -D"CMAKE_MAKE_PROGRAM:FILEPATH=C:/MinGW/bin/make.exe" -DCMAKE_BUILD_TYPE=Release ..\llvm
(pour une raison quelconque CMake n'a pas pu trouver le "make" automatiquement)#include <iostream> int main() { []{ std::cout << "hi"; }(); }
set PATH=<path to the build folder from step 5>/bin;c:/mingw/bin;%PATH% clang++ -std=c++11 1.cpp -o 1.exe -I"C:/MinGW/include" -I"C:/MinGW/include/c++/4.9.1" -I"C:\MinGW\include\c++\4.9.1\x86_64-w64-mingw32" -I"C:\MinGW\x86_64-w64-mingw32\include"
Ce qui n'a pas fonctionné :
cmake -G "Visual Studio 12" ..\llvm
, puis compilez la solution dans Visual Studio. Cependant, que Clang n'a pas réussi à compiler un exemple de cpp, il s'est plaint de "l'identifiant non déclaré 'char16_t'" et "__int128 n'est pas pris en charge sur cette cible" dans les en-têtes de bibliothèque standard MinGW. Si j'utilise des en-têtes clang-cl et MS STL, cela se plaint des spécificateurs "throw x (y)". Peut-être que je devais fournir des clés supplémentaires à la construction, mais je n'ai pas pu le faire fonctionner.C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xiosbase (293,4): erreur: ne peut pas encore compiler cette expression de lancement _THROW_NCEE (échec, "ios_base :: eofbit set"); C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstddef (56,30): remarque: développé à partir de la macro '_THROW_NCEE' #define _THROW_NCEE (x, y) throw x (y)
Reportez-vous http://clang.llvm.org/get_started.html#buildWindows
J'ai utilisé "Visual Studio 11 Win64" avec cmake et cela a fonctionné avec VS Express pour bureau actuellement disponible.
Aussi pour la bibliothèque, j'utilise MinGW-W 64 et pour les fichiers manquants SUA. http://mingw-w64.sourceforge.net/ et http://www.suacommunity.com/
Pour lier .o compilé par clang ++ pour une utilisation avec les binaires W 64 , j'utilise -m i386pep avec l'éditeur de liens ld à nouveau livré dans le W 64 livrable.
J'ai eu de nombreux problèmes pour créer LLVM et clang en utilisant VS et étant un utilisateur Unix, je préfère créer des sources à partir de la ligne de commande.
En suivant les instructions de Seth Carnegie, je l'ai construit à partir du référentiel SVN par opposition aux packages fournis, en utilisant LLVM v3.3 avec MinGW v4.5.2.