2013-05-23 12 views
5

Nach http://clang.llvm.org/get_started.html ich die ALL_BUILD unter Windows mit Visual Studio 2010 tat und hinzugefügt, um das eingebaute Material zu meinem Systempfad mit $ PATH = ... ClangSourcBuildPath ... \ \ bin \ ReleaseKlirren und <iostream> auf Fenster

bauen

$> Klirren file_c.c

//file_c.c 
#include <stdio.h> 

int main() 
{ 
    printf("hello world\n"); 
    return 0; 
} 

Aber wenn ich das gleiche für die folgende Datei ($> Klirren file_cpp.cpp):

ich kann jetzt die folgende Datei auf der Konsole mit kompilieren:

//file_cpp.cpp 
#include <iostream> 

int main() 
{ 
    std::cout << "Hello World!"; 
    return 0; 
} 

ich die folgenden Fehler:

In-Datei von file_cpp.cpp enthalten: 1:

In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\iostream:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\istream:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\ostream:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\ios:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\streambuf:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\xlocnum:13: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\xiosbase:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\xlocale:11: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\stdexcept:10: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\xstring:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\xmemory:15: 

C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\utility:81:10: 
error: missing 'typename' prior to dependent type name '_It::iterator_category' typedef _It::iterator_category iterator_category; 

C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\utility:82:10: 
error: missing 'typename' prior to dependent type name '_It::value_type' typedef _It::value_type value_type; 

C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\utility:83:10: 
error: missing 'typename' prior to dependent type name '_It::distance_type' typedef _It::distance_type distance_type; 

C:\Program Files (x86)\Microsoft Visual Studio\VC98\include\utility:224:32: 
error: template parameter redefines default argument 
template < class _E, class _Tr = char_traits<_E> > 

... 

ich auch versucht:

$> Klirren ++ file_cpp.cpp
$> clang -x C++ file_cpp.cpp

Aber ich bekomme immer noch die gleichen Fehler.

Kann mir jemand erklären, was los ist?

Antwort

3

Es gibt bestimmte Flags (ich denke, es war -fms-extensions, nicht ganz sicher von der genauen Option), die erforderlich sind, um Clang zu erhalten, um die VC++ - Header zu parsen.

Das nächste Problem, das auftreten wird, ist, dass die resultierende ausführbare Datei nicht verknüpft werden kann. Dies liegt daran, dass clang einen anderen Namen als MSVC verwendet und zu undefinierten Referenzen führt.

Wenn Sie Clang auf Windows verwenden (die mit MinGW-w64 derzeit möglich ist), können Sie meine vorkompilierte Pakete verwenden, werden Sie

  1. Clang 3.2

  2. GCC 4.6

  3. brauchen

In das gleiche Verzeichnis extrahiert. GCC wird in diesem Fall nur zum Aufruf des Linkers verwendet. Clang kann verwendet werden, um alles zu kompilieren.

Es gibt derzeit keine Möglichkeit, clang für C++ mit den Visual Studio-Headern + libs zu verwenden. C sollte funktionieren, aber ich habe es nicht getestet und es kann andere ABI-Probleme geben, die das verhindern.

Verwandte Themen