Clang sur Windows
Tout d'abord, j'ai suivi "Prise en main: création et Exécution de Clang". En particulier, j'ai construit selon "l'Aide de Visual Studio" section. En d'autres termes, j'ai construit à l'aide de Visual Studio 2010.
Ensuite, j'ai régler manuellement inclure et de la bibliothèque des chemins de MinGW distribution:
Le programme simple, je suis en train de compiler:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
- Je obtenir les commentaires suivants à partir du compilateur:
In file included from C:\MinGW\lib\gcc\mingw32.5.2\include\c++\iostream:39:
In file included from C:\MinGW\lib\gcc\mingw32.5.2\include\c++\ostream:39:
In file included from C:\MinGW\lib\gcc\mingw32.5.2\include\c++\ios:38:
In file included from C:\MinGW\lib\gcc\mingw32.5.2\include\c++\iosfwd:41:
In file included from C:\MinGW\lib\gcc\mingw32.5.2\include\c++\bits/postypes.h:41:
C:\MinGW\lib\gcc\mingw32.5.2\include\c++\cwchar:144:11: error: no member named 'fgetws' in the global namespace
using ::fgetws;
~~^
C:\MinGW\lib\gcc\mingw32.5.2\include\c++\cwchar:146:11: error: no member named 'fputws' in the global namespace
using ::fputws;
~~^
C:\MinGW\lib\gcc\mingw32.5.2\include\c++\cwchar:150:11: error: no member named 'getwc' in the global namespace
using ::getwc;
~~^
C:\MinGW\lib\gcc\mingw32.5.2\include\c++\cwchar:151:11: error: no member named 'getwchar' in the global namespace
using ::getwchar;
~~^
C:\MinGW\lib\gcc\mingw32.5.2\include\c++\cwchar:156:11: error: no member named 'putwc' in the global namespace
using ::putwc;
~~^
C:\MinGW\lib\gcc\mingw32.5.2\include\c++\cwchar:157:11: error: no member named 'putwchar' in the global namespace
using ::putwchar;
~~^
6 errors generated.
Build error occurred, build is stopped
Time consumed: 646 ms.
La question évidente: pourquoi dois-je l'obtenir?
En outre, je voudrais savoir plus de détails, et depuis, Clang site web fournit une très brève information - j'ai pensé que quelqu'un pourrait clarifier les questions suivantes à moi:
- Autant je comprends Clang ne dispose pas de sa propre bibliothèque standard (stdc++ je suppose, n'est-ce pas?). C'est pourquoi je dois utiliser MinGW les en-têtes et les bibliothèques - ai-je le droit?
- Quelle est la différence entre la construction de Clang avec Visual Studio et MinGW?
- Dois-je code en dur chemins à inclure dans
clang/lib/Frontend/InitHeaderSearch.cpp
ou je peux l'ignorer et de plutôt de spécifier les chemins plus tard par "-I" option comme je le fais dans la capture d'écran ci-dessus?
- La combinaison que j'ai eu à travailler dans le passé est à modifier InitHeaderSearch.cpp pour inclure le chemin d'accès à mon MinGW inclure des dossiers et ensuite de construire avec le MinGW de la chaîne. J'ai aussi été en mesure de construire à l'aide de Visual C++ de la chaîne, mais je n'étais pas en mesure de comprendre comment obtenir le construit compilateur d'utiliser les en-têtes et les bibliothèques de l'installer MinGW (Visual C++ C++ Standard Library en-têtes ne peuvent pas être utilisées, car elles s'appuient largement sur Visual C++fonctions spécifiques).
- Ouais c'est exactement ce à quoi je pensais. Mais la plus grande confusion pour moi, c'est le cas de la construction à l'aide de Visual C++ ou MinGW est liée à inclure et à la bibliothèque des chemins utilisés lors de l'utilisation du compilateur Clang. En d'autres termes, je dois pouvoir choisir librement ces chemins après avoir compilé Clang. Pourquoi sur terre serait de ces chemins dépend du compilateur que j'ai utilisé pour construire Clang?
- Clang devrait être en mesure d'analyser VC++ en-têtes actuellement. La seule problématique de l'analyse de la zone MFC est IIRC.
- Je suis complètement d'accord avec ce que vous dites. J'ai essayé d'obtenir la clang plugin de travail sur Sublime Text 2 sur Windows et l'étrange stdc++/header problèmes sont... eh bien, étrange.
Vous devez vous connecter pour publier un commentaire.
Si vous construisez Clang avec MSVS, il recherche automatiquement la valeur par défaut VS inclure des chemins d'accès, et de tirer dans les en-têtes. C'est la raison pour la bibliothèque libstdc++ - têtes sont de produire des erreurs: ils sont l'importation de fonctions C n'est pas présent dans le VS des en-têtes. À l'aide de Clang pour C++ avec VS est pour l'instant un no-go: vous obtiendrez un lien de défaillances dues à l'absence d'ABI (nom et d'amputation des autres) fonctionnalité dans Clang. Si vous voulez continuer à utiliser l'MSVS Bruit, ne pas pointer vers MinGW-têtes. Il analyse le VS-têtes (notamment C++), cela échouera lien.
MODIFIER: j'ai construit une dw2 version de GCC (32 bits uniquement), accompagné par le Bruit. Les Exceptions de travail dans cette version, et de sorte que vous pouvez construire un vrai C++ trucs avec Clang maintenant sur Windows. Obtenir la version 3.2 ici.
4.6.3-1
, et télécharger le...gcc-4.6.3-1_rubenvb.7z
paquet, et le...clang-3.1-1_rubenvb.7z
paquet, et de les extraire à la fois dans le même répertoire. Le reste est déjà dans ma réponse.clang somefile.c -o test.exe
, sans la nécessité d'ajouter de la norme chemins à inclure à la ligne de commande. En va de même pour GCC: il sait où tous ses en-têtes sont situés trop.configure && make
.La réponse la plus évidente est que vous avez oublié d'envoi-fno-ms-compatibilité de clang++ 😛
Je suis en train de faire des applications windows dev à l'aide de VS et utiliser clang+CodeBlocks pour le partage aspects neutre à la plate-forme de domaine de.