Tout d'abord, j'ai suivi "Mise en route: construction et exécution de Clang" . En particulier, je l'ai construit selon la section "Utilisation de Visual Studio". En d'autres termes, je l'ai construit à l'aide de Visual Studio 2010.
Deuxièmement, j'ai défini manuellement les chemins d'inclusion et de bibliothèque pour la distribution MinGW:
Le programme simple que j'essaye de compiler:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
Je reçois les commentaires suivants du compilateur:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iostream:39:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ostream:39:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ios:38:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iosfwd:41:
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\bits/postypes.h:41:
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:144:11: error: no member named 'fgetws' in the global namespace
using ::fgetws;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:146:11: error: no member named 'fputws' in the global namespace
using ::fputws;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:150:11: error: no member named 'getwc' in the global namespace
using ::getwc;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:151:11: error: no member named 'getwchar' in the global namespace
using ::getwchar;
~~^
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:156:11: error: no member named 'putwc' in the global namespace
using ::putwc;
~~^
C:\MinGW\lib\gcc\mingw32\4.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 est - pourquoi est-ce que je reçois ceci?
De plus, je voudrais en savoir plus et depuis, le site Web de Clang fournit des informations extrêmement brèves - je pensais que quelqu'un pourrait me clarifier les questions suivantes:
clang/lib/Frontend/InitHeaderSearch.cpp
ou je peux l'ignorer et plutôt spécifier ces chemins plus tard via l'option "-I" comme je le fais dans la capture d'écran ci-dessus?Si vous construisez Clang avec MSVS, il recherchera automatiquement les chemins d'inclusion VS par défaut et récupérera ces en-têtes. C'est la raison pour laquelle les en-têtes libstdc ++ génèrent des erreurs: ils importent des fonctions C non présentes dans les en-têtes VS. L'utilisation de Clang pour C++ avec VS est pour l'instant un pas: vous obtiendrez des échecs de liaison en raison de la fonctionnalité ABI (nom mangling et autres) manquante dans Clang. Si vous souhaitez toujours utiliser le MSVS Clang, ne le pointez pas vers les en-têtes MinGW. Il analysera les en-têtes VS (y compris C++), il ne réussira tout simplement pas à lier.
[~ # ~] edit [~ # ~] : J'ai construit une version dw2 de GCC (32 bits uniquement) accompagnée de Clang. Les exceptions fonctionnent dans cette version, et vous pouvez donc créer de vraies choses C++ avec Clang maintenant sur Windows. Obtenez la version 3.2 ici .
La réponse évidente est que vous avez oublié d'envoyer la compatibilité -fno-ms à clang ++: P
Je fais du développement d'applications Windows en utilisant VS et j'utilise clang + CodeBlocks pour partager des aspects neutres avec le domaine de la plateforme.