2012-10-29 3 views
5

Windows에서 clang 3.2를 빌드하고 간단한 hello world 프로그램을 작성하려고했습니다. 그러나 아래에 보이는 것과 같은 많은 오류가 발생합니다.Windows에서 clang으로 C++ 11 프로그램을 컴파일하는 중 오류가 발생했습니다.

d:\Marius\xyz>clang++ -stdlib=libc++ -std=c++11 -Wall xyz.cpp -o xyz.exe 
clang++: warning: argument unused during compilation: '-stdlib=libc++' 
In file included from xyz.cpp:12: 
In file included from ./stdafx.h:18: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm:6: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory:6: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xutility:8: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\utility:8: 
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\type_traits:1072: 
33: error: 
    '_Ty' does not refer to a value 
      _HAS_TRIVIAL_MOVE_CONSTRUCTOR(_Ty) 
             ^

... 

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xstddef:540:50: note: 
     expanded from macro '_VARIADIC_EXPAND_4' 
#define _VARIADIC_EXPAND_4(FUNC, X1, X2, X3, X4) \ 
               ^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xrefwrap:222:22:note: 
     expanded from macro '_CLASS_RESULT_OF_PMF_OPT_0X' 
         __thiscall, X2, X3, X4) 
             ^
fatal error: too many errors emitted, stopping now [-ferror-limit=] 
20 errors generated. 

VC++ 2012 헤더에서 오는 많은 오류가 발생합니다. Windows에서 clang ++을 사용하여 C++ 11 코드를 작성할 수 있습니까? 추가 명령 스위치를 제공해야합니까?

+0

'-fms-extensions' 가능합니다. – arrowd

+0

사용자 설명서 (http://clang.llvm.org/docs/UsersManual.html)에 따르면이 플래그는 기본적으로 활성화되어 있습니다. 또한 -fmsc-version = 1700 (즉 VS2012) 및 -fdelayed-template-parsing (기본값이어야 함) 설정을 시도했습니다. 결과가 없다. stdafx.h를 제거해도 컴파일 오류에는 영향을주지 않습니다. –

+0

또한 mingw 헤더를 -isystem과 함께 사용하려고 시도했지만 구성 악몽처럼 보입니다. 인클루드 순서에 따라 다른 오류가 발생하고 컴파일 오류없이 주문을 설정할 수 없습니다. –

답변

2

Visual Studio에서 빌드했을 때 Clang이 제대로 작동하지 않습니다 (MinGW에서 빌드했을 때 작동하지만 실제로 확인하지 못했습니다).

Clang이 빌드 될 때, 빌드 할 때 사용한 라이브러리를 사용하도록 구성됩니다. Visual Studio를 사용하여 Clang을 작성한 이후 Clang은 Visual Studio 헤더 및 라이브러리를 사용하려고합니다. 불행히도 Clang과 Visual Studio의 내부 구조가 달라서 Clang 이 VS 특정 헤더를 사용할 수 없습니다.

libc++까지는 Windows 용으로 컴파일 할 수 있습니다. Visual Studio에서 컴파일 할 때 Clang은 거의 작동하지 않습니다. MinGW를 사용하여 건물을 짓고 (그리고 어떻게했는지에 대한 블로그 글이나 다른 것을 만드십시오!), 그것이 당신에게 효과가 있는지보십시오.

0

clang의 기본 설정은 내장 된 도구 체인의 포함입니다. 그러나 MS의 경우와 마찬가지로 사용 된 확장 기능은 공급 업체에 따라 다를 수 있습니다. clang 자신의 libC++ 가용성은이 문제를 크게 완화시킬 것으로 기대됩니다. 올바른 include dir을 수동으로 지정하십시오.

빌드하는 동안 별도의 컴파일 및 링크 단계가 필요합니다. 이렇게하면 VS 기본값보다 정확한 바이너리 라이브러리가 링크됩니다.

관련 문제