Clang sur Windows

Tout d'Abord, j'ai suivi "prise en main: création 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 en utilisant Visual Studio 2010.

Deuxièmement, j'ai manuellement défini les chemins d'inclusion et de bibliothèque pour la distribution MinGW:

entrez la description de l'image ici

Le programme simple que j'essaie 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:MinGWlibgccmingw324.5.2includec++iostream:39:
In file included from C:MinGWlibgccmingw324.5.2includec++ostream:39:
In file included from C:MinGWlibgccmingw324.5.2includec++ios:38:
In file included from C:MinGWlibgccmingw324.5.2includec++iosfwd:41:
In file included from C:MinGWlibgccmingw324.5.2includec++bits/postypes.h:41:
C:MinGWlibgccmingw324.5.2includec++cwchar:144:11: error: no member named 'fgetws' in the global namespace
  using ::fgetws;
        ~~^
C:MinGWlibgccmingw324.5.2includec++cwchar:146:11: error: no member named 'fputws' in the global namespace
  using ::fputws;
        ~~^
C:MinGWlibgccmingw324.5.2includec++cwchar:150:11: error: no member named 'getwc' in the global namespace
  using ::getwc;
        ~~^
C:MinGWlibgccmingw324.5.2includec++cwchar:151:11: error: no member named 'getwchar' in the global namespace
  using ::getwchar;
        ~~^
C:MinGWlibgccmingw324.5.2includec++cwchar:156:11: error: no member named 'putwc' in the global namespace
  using ::putwc;
        ~~^
C:MinGWlibgccmingw324.5.2includec++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 faire - Je l'obtenir?

En outre, 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 clarifier les questions suivantes pour moi:

  1. pour autant que je sache, Clang n'a pas sa propre bibliothèque standard (stdc++ je suppose, n'est-ce pas?). C'est pourquoi je dois utiliser les en - têtes et les bibliothèques de MinGW-ai-je raison?
  2. Quelle est la différence entre construire Clang avec Visual Studio et MinGW?
  3. Vraiment dois-je coder en dur inclure des chemins dans 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?
23
demandé sur Alexander Shukaev 2012-01-16 20:08:03

2 réponses

Si vous construisez Clang avec MSVS, il recherchera automatiquement les chemins VS include par défaut et insérera ces en-têtes. C'est la raison pour laquelle les en-têtes libstdc++ produisent des erreurs: ils importent des fonctions C non présentes dans les en-têtes VS. Utiliser Clang pour C++ avec VS est pour L'instant un non-go: vous obtiendrez des échecs de lien En raison de la fonctionnalité ABI manquante (name mangling et autres) dans Clang. Si vous voulez toujours utiliser le Clang MSVS, ne le pointez pas vers les en-têtes MinGW. Il analysera les en-têtes VS (y compris C++), il ne parviendra pas à lier.


EDIT : j'ai construit une version dw2 de GCC (32 bits uniquement) accompagnée de Clang. Les Exceptions fonctionnent dans cette construction, et vous pouvez donc créer de vrais trucs C++ avec Clang maintenant sur Windows. obtenez la version 3.2 ici .

32
répondu rubenvb 2013-01-02 14:29:51

La réponse évidente est que vous avez oublié d'envoyer-FNO-ms-compatibility à clang++: p

  1. vous avez raison.
  2. VC++ est une chaîne D'outils GUI, MinGW est une console de caractères.
  3. non comme clang est assez mature pour la consommation publique mais encore pour se stabiliser alors laissez son équipe de développement travailler sur le code sinon vous risquez un travail qui pourrait devenir Lost island. J'utilise -I comme votre exemple le suggère.

Je fais Windows app dev en utilisant VS et utilise clang + CodeBlocks pour partager des aspects neutres au domaine de la plateforme.

1
répondu Chawathe Vipul 2013-03-04 12:14:46