2013-05-23 8 views
5

Secondo http://clang.llvm.org/get_started.html ho fatto l'ALL_BUILD su Windows con Visual Studio 2010 e ha aggiunto la roba costruita al mio percorso di sistema con $ PATH = ... ClangSourcBuildPath ... \ costruire \ bin \ Releaseclangore e <iostream> sulle finestre

ora posso compilare il seguente file sulla console con:

$> clang file_c.c

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

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

Ma se faccio lo stesso per il seguente file ($> clang file_cpp.cpp):

//file_cpp.cpp 
#include <iostream> 

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

Ottengo i seguenti errori:

Nel file incluso da file_cpp.cpp: 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> > 

... 

Ho anche provato:

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

Ma ho ancora gli stessi errori.

Qualcuno può spiegarmi cosa c'è che non va?

risposta

3

Ci sono alcuni flag (penso che fosse -fms-extensions, non proprio sicuri dell'opzione esatta) necessari per ottenere clang per analizzare le intestazioni di VC++.

Il prossimo problema che si verificherà è che l'eseguibile risultante non può essere collegato. Ciò è dovuto al fatto che clang utilizza un nome diverso da mangling rispetto a MSVC e genererà riferimenti non definiti.

Se si desidera utilizzare Clang su Windows (che è attualmente possibile con MinGW-W64), è possibile usare i miei pacchetti precompilati, è necessario

  1. Clang 3.2

  2. GCC 4.6

Estratto nella stessa directory. In questo caso, GCC è utilizzato solo per chiamare il linker. Clang può essere usato per compilare tutto.

Attualmente non esiste un modo per utilizzare clang per C++ con le intestazioni di Visual Studio + libs. C dovrebbe funzionare, ma non ho testato e potrebbero esserci altri problemi ABI che impediscono il corretto funzionamento.

Problemi correlati