2017-10-12 2 views
1

Ich benutze clang 4.0.0 kompiliert aus der Quelle auf Windows 10 (32-Bit-OS, x86-Prozessor). Ich versuche, meinen cpp Code zu llvm ir code des Formats ll zu kompilieren. Hier ist ein Beispielcode, die Klirren mit kompilieren fehlschlägt:Clang ++ 4.0.0 Kompilierungsfehler in 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; 
} 

Dies ist nur ein Beispielcode ist, aber es ist das gleiche Verhalten in allen C++ Code, der die genannten Header-Dateien enthalten. Ich verwende den folgenden Befehl, um llvm ir Code zu kompilieren:

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

Beim Übersetzen bekomme ich folgende Fehlermeldung:

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. 

Was ich erwarte, dass Sie den Befehl nach dem Ausführen der Bytecode-Datei erzeugt hat (.ll Datei). Ich habe viele Posts gesehen, wo sie eine Flagge einführen: '-fms-compatibility-version = 19' zusammen mit dem Befehl. Das hinzugefügte Flag wird jedoch als unbekanntes Argument gekennzeichnet. Ich arbeite mit MSVS 2017. Vielleicht verwende ich diese Flagge falsch. Aber ich bin jetzt seit einem Tag in dieser Sackgasse. Jede Hilfe oder Anregung würde sehr geschätzt werden.

+0

Bitte fügen Sie ein kleines kompilierbares Beispiel bei. – OmnipotentEntity

+0

Vielen Dank für das Aktualisieren Ihrer Frage. Mit einer leicht modifizierten Quelle, um Windows spezifische Header zu entfernen, kompiliert es unter Linux gut. Also würde ich mit der Fehlersuche beginnen. Versuchen Sie, Ihre Includes neu anzuordnen und diejenigen zu entfernen, die nicht benötigt werden. – OmnipotentEntity

+0

Was genau meinst du? Aufgrund der Header-Probleme kommt es nicht zu einer Kompilierungsstufe. –

Antwort

0

Dies wurde behoben, indem der korrekte Pfad zu den Header-Dateien in der Umgebungsvariablen INCLUDE hinzugefügt wurde. Die meisten meiner Fehler wurden behoben, nachdem ich die Pfade festgelegt hatte. Dies schließt den Fehler ein, bei dem das Kompilieren einer C++ - Datei, die auf bestimmte Kopfzeilen wie windows.h verweist, eine nicht gefundene Datei ergibt.

-Link auf, wie das gleiche zu tun: List all environment variables from command line?

Sie auch ein anderes Problem beheben, das ist:

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

durch die Umgebungsvariable LIBPATH Einstellung an die richtige Stelle des libcmt.lib-zu-Punkt Datei. Ich fand meine bei:

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

Diese trivialen Fragen ließ mich verbringen einige Tage, um herauszufinden. Hoffe, das spart jemandem die gleichen Probleme.