2016-05-28 4 views
0

Lorsque Clang 3.7 était installé, il trouvait les en-têtes STL de mon installation GCC aussi longtemps que seulement ces deux répertoires dans le chemin.Clang sur WIndows trouve des en-têtes VC au lieu de GCC

Maintenant que je l'ai installé Clang 3.8 le compilateur conserve trouver les en-têtes Visual Studio malgré le fait qu'il est même pas dans le chemin

Mon parcours est le suivant:

PATH=whatever;G:\Compilers\LLVM\bin;g:\compilers\Mingw64-64bit\bin 

Modifier 1

J'ai savoir idée de ce que le bon comprennent des chemins, mais j'ai essayé une compilation en CodeLite qui a trouvé ces:

"-IG:\\Compilers\\Mingw64-64bit\\x86_64-w64-mingw32\\include\\c++" 
"-IG:\\Compilers\\Mingw64-64bit\\x86_64-w64-mingw32\\include\\c++\\x86_64-w64-mingw32" 
"-IG:\\Compilers\\Mingw64-64bit\\lib\\gcc\\x86_64-w64-mingw32\\5.1.0\\include" 
"-IG:\\Compilers\\Mingw64-64bit\\lib\\gcc\\x86_64-w64-mingw32\\5.1.0\\include-fixed" "-IG:\\Compilers\\Mingw64-64bit\\x86_64-w64-mingw32\\include" 
"-IG:\\Compilers\\Mingw64-64bit\\x86_64-w64-mingw32\\include\\c++\\backward" 

J'utilise aussi le drapeau dialecte --std=c++11

Toutefois, un programme très simple en utilisant la bibliothèque C++ me donne des erreurs telles que

G:\Compilers\Mingw64-64bit\x86_64-w64-mingw32\include\c++\bits/stringfwd.h:63:33: error: use of undeclared identifier 'char16_t' 
    template<> struct char_traits<char16_t>; 
          ^

Edit 2

maintenant passer x86_64-w64-mingw32 comme recommandé par Martin, le processus d'autodiscovery semble fonctionner, mais l'exécutable produit se fige.

J'ai trouvé la même chose quand j'ai essayé d'utiliser le jeu d'outils VS2015 Clang

L'exemple de code que je utilise est ce

#include <iostream> 

int main() 
{ 
    int arr[] = {1, 2, 3, 4, 5}; 
    for(auto el : arr) 
    { 
     std::cout << el << std::endl; 
    } 
    return 0; 
} 

Je compile maintenant avec:

clang++ -v --target=x86_64-w64-mingw32 hello.cpp -o test.exe -std=c++14 

I ont examiné l'exécutable produit avec dépendance Walker et il montre aussi une compilation de bit 64 et la liaison à "g:\Compilers\Mingw64-32Bit\bin\libstdc++-6.dll"

Je pense que l'étape suivante serait de compiler une version 32 bits, mais je ne peux pas sembler trouver le nom de la cible correcte pour ce

Je viens d'essayer clang++ hello.cpp -o main.exe -std=c++14 --target=i686-pc-mingw32 -v

qui semble produire un 32 exécutable peu, mais encore une fois, il gèle

Remarque je mis à jour le chemin pour pointer vers le clang 32 bits.

Edit 3

Ce que je trouve la confusion est que jusqu'à ce que je suis passé x86_64-w64-mingw32 comme cible je suis arrivé des erreurs très similaires à la fois de passer les chemins du CCG et de la cible par défaut de MSVC où les deux semblait être liée à char16_t et types similaires

Voyant cela, je pensais que je voudrais essayer si le passage d'une cible peut corriger les erreurs du compilateur VC

Alors que ce genre de semble fonctionner juste crée plus de problèmes, car il garde demander des libs à lien vers et je ne sais pas les bonnes

J'essayé:

clang++ hello.cpp -o main-vc.exe -std=c++14 --target=x86_64-pc-windows-msvc19.0.0 -v 
-Xlinker "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64\libcmt.lib" 
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64\libcpmt.lib" 
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64\libvcruntime.lib" 
"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x64\libucrt.lib" 

Je ne sais pas quels étaient les bons répertoires pour passer.

Je sens que je dois passer un autre fichier lib que je reçois cette erreur

libcmt.lib (thread_safe_statics.obj): LNK2019 d'erreur: symbole externe non résolu __imp_CloseHandle

+0

Essayez de regarder la variable d'environnement 'include' au lieu de' path'? –

+0

Je suppose que je devrais le faire, mais c'est étrange que plus tôt, il suivait une sorte de processus d'autodécouverte –

Répondre

1

Avez-vous changé la cible? VC est la nouvelle valeur par défaut. Utilisez ce (par exemple) pour x64, MinGW:

clang ++ --target = x86_64-w64-mingw32 test.cpp

Ne pas oublier l'éditeur de liens comme wel.

+0

D'où viennent ces valeurs --target? Je ne peux pas trouver de référence à eux –