2017-10-12 11 views
1

J'utilise clang 4.0.0 compilé à partir de la source sur Windows 10 (OS 32 bits, processeur x86). J'essaye de compiler mon code de cpp au code llvm ir du format ll. Voici un exemple de code qui ne parvient pas à compiler en utilisant clang:Erreur de compilation Clang ++ 4.0.0 dans Windows

#include <windows.h> 
#include <tlhelp32.h> 
#include <fstream> 
#include <mapi.h> 
#include <memory> 
#include<stdio.h> 

/* Function to calculate x raised to the power y */ 
int power(int x, unsigned int y) 
{ 
    if (y == 0) 
     return 1; 
    else if (y%2 == 0) 
     return power(x, y/2)*power(x, y/2); 
    else 
     return x*power(x, y/2)*power(x, y/2); 
} 

/* Program to test function power */ 
int main() 
{ 
    int x = 2; 
    unsigned int y = 3; 

    printf("%d", power(x, y)); 
    return 0; 
} 

Ceci est juste un exemple de code, mais il est le même comportement dans l'ensemble du code C++ qui incluent les fichiers d'en-tête répertoriés. -je utiliser la commande suivante pour compiler à LLVM code ir:

clang++ -S -emit-llvm assiral.cpp -o assiral.ll 

sur la compilation je reçois l'erreur suivante:

C:\Sample>clang++ -emit-llvm -S assiral.cpp -o assiral.ll 
In file included from assiral.cpp:3: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\fstream:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\includem:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ostream:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ios:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocnum:7: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\cmath:617: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xtgmath.h:9: 
C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xtr1common:204:22: error: 
use of undeclared identifier 'char16_t' 
struct _Is_integral<char16_t> 
^ 
C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xtr1common:210:22: error: 
use of undeclared identifier 'char32_t' 
struct _Is_integral<char32_t> 
^ 
In file included from assiral.cpp:3: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\fstream:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\includem:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ostream:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ios:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocnum:10: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\streambuf:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xiosbase:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocale:8: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\stdexcept:6: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\exception:7: 
In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\type_traits:6: 
C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstddef:257:2: error: 'auto' 
    return without trailing return type; deduced return types are a C++14 extension 
auto _Unfancy(_Ptrty _Ptr) 
^
    In file included from assiral.cpp:3: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\fstream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\includem:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ostream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ios:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocnum:10: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\streambuf:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xiosbase:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocale:8: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\stdexcept:7: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xmemory0:8: 
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\limits:612:33: error: use of 
    undeclared identifier 'char16_t' 
    template<> class numeric_limits<char16_t> 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\limits:902:33: error: use of 
    undeclared identifier 'char32_t' 
    template<> class numeric_limits<char32_t> 
^
    In file included from assiral.cpp:3: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\fstream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\includem:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ostream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ios:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocnum:10: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\streambuf:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xiosbase:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocale:8: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\stdexcept:7: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xmemory0:10: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xutility:8: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\utility:7: 
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\iosfwd:254:21: error: use of 
    undeclared identifier 'char16_t' 
    struct char_traits<char16_t> 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\iosfwd:263:21: error: use of 
    undeclared identifier 'char32_t' 
    struct char_traits<char32_t> 
^
    In file included from assiral.cpp:3: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\fstream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\includem:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ostream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ios:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocnum:10: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\streambuf:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xiosbase:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocale:8: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\stdexcept:7: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xmemory0:10: 
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xutility:698:2: error: 
    'auto' return without trailing return type; deduced return types are a C++14 extension 
auto _Unchecked_n(_Iter _Src, _Diff) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xutility:742:2: error: 
    'auto' return without trailing return type; deduced return types are a C++14 extension 
auto _Unchecked_n_backward(_Iter _Src, _Diff) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xutility:1142:12: error: 
    deduced return types are a C++14 extension 
constexpr decltype(auto) _Operator_arrow(_Iterator&& _Target, false_type) 
^
    In file included from assiral.cpp:3: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\fstream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\includem:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ostream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ios:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocnum:10: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\streambuf:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xiosbase:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocale:8: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\stdexcept:7: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:6: 
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xmemory0:356:2: error: 
    'auto' return without trailing return type; deduced return types are a C++14 extension 
auto _Const_cast(_Ptrty _Ptr) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xmemory0:366:2: error: 
    'auto' return without trailing return type; deduced return types are a C++14 extension 
auto _Const_cast(_Ty * _Ptr) 
^
    In file included from assiral.cpp:3: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\fstream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\includem:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ostream:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\ios:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocnum:10: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\streambuf:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xiosbase:6: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xlocale:8: 
    In file included from C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\stdexcept:7: 
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:75:2: error: 
    statement not allowed in constexpr function 
    for (auto _Match_try = _Haystack + _Start_at; ; ++_Match_try) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:119:3: error: 
    statement not allowed in constexpr function 
    for (auto _Match_try = _Haystack + _Min_value(_Start_at, _Hay_size - _Needle_size); ; --_Match_try) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:144:3: error: 
    statement not allowed in constexpr function 
    for (auto _Match_try = _Haystack + _Min_value(_Start_at, _Hay_size - 1); ; --_Match_try) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:169:3: error: 
    statement not allowed in constexpr function 
    for (auto _Match_try = _Haystack + _Start_at; _Match_try < _End; ++_Match_try) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:188:3: error: 
    statement not allowed in constexpr function 
    for (auto _Match_try = _Haystack + _Min_value(_Start_at, _Hay_size - 1); ; --_Match_try) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:213:3: error: 
    statement not allowed in constexpr function 
    for (auto _Match_try = _Haystack + _Start_at; _Match_try < _End; ++_Match_try) 
^
    C:\Program Files\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\xstring:233:3: error: 
    statement not allowed in constexpr function 
    for (auto _Match_try = _Haystack + _Start_at; _Match_try < _End; ++_Match_try) 
^
    fatal error: too many errors emitted, stopping now [-ferror-limit=] 
    20 errors generated. 

Ce que j'attends après l'exécution de la commande est d'avoir le fichier bytecode généré (fichier .ll). J'ai vu beaucoup de messages où ils introduisent un drapeau: '-fms-compatibility-version = 19' avec la commande. Cependant, le drapeau ajouté est signalé comme un argument inconnu. Je travaille avec MSVS 2017. Peut-être que j'utilise mal ce drapeau. Mais je suis dans cette impasse depuis un jour maintenant. Toute aide ou suggestion serait grandement appréciée.

+0

Veuillez inclure un exemple compilable minimal. – OmnipotentEntity

+0

Merci d'avoir mis à jour votre question. Avec une source légèrement modifiée pour supprimer les en-têtes spécifiques de Windows, elle se compile correctement sous Linux. Voilà donc où je commencerais le dépannage. Essayez de réarranger vos inclusions et d'en supprimer celles qui ne sont pas nécessaires. – OmnipotentEntity

+0

Que voulez-vous dire exactement? Il n'arrive pas à une étape de compilation en raison des problèmes d'en-tête. –

Répondre

0

Ceci a été corrigé en ajoutant le chemin correct aux fichiers d'en-tête dans la variable d'environnement INCLUDE. La plupart de mes erreurs ont été résolues une fois que j'ai réparé les chemins. Cela inclut l'erreur lors de la compilation d'un fichier C++ qui fait référence à certains en-têtes comme windows.h donne un fichier introuvable.

Lien sur la façon de faire la même chose: List all environment variables from command line?

Vous pouvez également résoudre un autre problème qui est:

link fatal error lnk1104 cannot open file 'libcmt.lib' 

en définissant la variable d'environnement LIBPATH pour pointer vers le bon emplacement du libcmt.lib fichier. J'ai trouvé le mien à:

C:\Program Files\Microsoft Visual Studio 14.0\VC\lib 

Ces problèmes triviaux m'ont laissé passer quelques jours à comprendre. J'espère que cela sauve quelqu'un d'ennui.