2012-01-16 2 views
23

우선, 나는 "Getting Started: Building and Running Clang"을 따라갔습니다. 특히, "Visual Studio 사용"절에 따라 빌드했습니다. 즉, 내가는 MinGW 분포 라이브러리 경로를 포함하고 내가 수동으로, 그것은 둘째 Visual Studio 2010에서 Visual Studio 2010을Windows의 Clang

를 사용하여 한 내장 설정 한 :

enter image description here

I가 노력하고있어 간단한 프로그램 컴파일 :

In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iostream:39: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ostream:39: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ios:38: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iosfwd:41: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\bits/postypes.h:41: 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:144:11: error: no member named 'fgetws' in the global namespace 
    using ::fgetws; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:146:11: error: no member named 'fputws' in the global namespace 
    using ::fputws; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:150:11: error: no member named 'getwc' in the global namespace 
    using ::getwc; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:151:11: error: no member named 'getwchar' in the global namespace 
    using ::getwchar; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:156:11: error: no member named 'putwc' in the global namespace 
    using ::putwc; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:157:11: error: no member named 'putwchar' in the global namespace 
    using ::putwchar; 
     ~~^ 
6 errors generated. 
Build error occurred, build is stopped 
Time consumed: 646 ms. 
012 : 나는 컴파일러에서 다음 피드백을 얻을

#include <iostream> 
using namespace std; 

int main() { 
    cout << "Hello, World!" << endl; 
    return 0; 
} 

명백한 질문은 - 왜 이것을 얻습니까?

또한, 좀 더 자세한 내용을 알고 싶습니다, 그리고 이후는, 연타 웹 사이트는 매우 간단한 정보를 제공합니다 - 나는 누군가가 나에게 다음과 같은 질문에 명확 수 있다고 생각 : 지금까지 내가 연타하지 않는 이해

  1. 을 자체 표준 라이브러리 (stdC++가 맞습니까?)가 있습니다. 그래서 MinGW의 헤더와 라이브러리를 사용해야합니다. 맞습니까?
  2. Visual Studio와 MinGW를 함께 사용하여 Clang을 빌드하는 경우의 차이점은 무엇입니까?
  3. clang/lib/Frontend/InitHeaderSearch.cpp에 포함 경로를 하드 코드해야합니까, 아니면 건너 뛸 수 있으며 나중에 위의 스크린 샷 에서처럼 "-I"옵션을 통해 해당 경로를 지정해야합니까?
+2

내가 과거에 작업 한 조합은 MinGW 포함 폴더에 대한 경로를 포함하도록 InitHeaderSearch.cpp를 수정 한 다음 MinGW 도구 체인으로 빌드하는 것입니다.또한 Visual C++ 툴체인을 사용하여 빌드 할 수 있었지만 빌드 된 컴파일러에서 MinGW 설치의 헤더와 라이브러리를 활용하는 방법을 알아낼 수 없었습니다 (Visual C++ C++ 표준 라이브러리 헤더는 Visual C++ 관련 기능에 광범위하게 의존하기 때문에 사용할 수 있습니다. –

+3

그래, 그게 내가 정확히 생각한거야. 그러나 가장 큰 혼란은 Visual C++ 또는 MinGW를 사용하여 빌드하는 것이 Clang 컴파일러를 사용하는 동안 포함 된 라이브러리 경로 및 포함과 관련되는 것입니다. 즉, 나는 Clang을 편집 한 후에 이러한 경로를 자유롭게 선택할 수 있어야합니다. 왜 이러한 경로가 내가 Clang을 구축하는 데 사용했던 컴파일러에 의존할까요? –

+1

@JamesMcNellis : Clang은 현재 VC++ 헤더를 구문 분석 할 수 있어야합니다. 유일하게 문제가되는 구문 분석 영역은 MFC IIRC입니다. – rubenvb

답변

32

MSVS로 Clang을 빌드하면 자동으로 기본 VS 포함 경로를 검색하여 해당 헤더를 가져옵니다. 이것은 libstdC++ 헤더가 오류를 생성하고있는 이유입니다. VS 헤더에없는 C 함수를 가져오고 있습니다. CLang for C++ for VS를 VS와 함께 사용하면 Clang에서 ABI (name mangling and others) 기능이 없기 때문에 링크 오류가 발생합니다. 그래도 MSVS Clang을 사용하려면 MinGW 헤더를 가리 키지 마십시오. VS 헤더 (C++ 포함)를 구문 분석하면 링크가되지 않습니다.


편집 : 나는 연타 함께 GCC (32 비트 전용)의 DW2 버전을 구축했다. 예외가이 빌드에서 작동하므로 Windows에서 Clang으로 실제 C++을 빌드 할 수 있습니다. Get version 3.2 here.

+0

그리고 MinGW에서 수동으로 직접 빌드하고 스크린 샷에서와 같이 수동으로 경로를 추가하면 어떻게 될까요? –

+1

clang의 사전 빌드 된 바이너리 패키지? –

+0

@ Mr.Anubis : 예, 저는 GCC의 각 버전에 대해 Clang의 Windows 빌드를 구축했습니다. 당신은 단지 그것을 혼자 사용할 수 없습니다. – rubenvb

1

확실한 대답은 당신 ++ 그 소리에 -fno-MS-호환성을 보내 잊었입니다 : P

  1. 자네 말이 맞아.
  2. VC++는 GUI 도구 체인이며, MinGW는 문자 콘솔입니다.
  3. 대중은 소비하기에 충분하지만 아직 안정화되어 있으므로 개발자 팀이 코드 작업을하도록하십시오. 그렇지 않으면 손실 된 섬이 될 수도 있습니다. 나는 네가 제시 한대로 - I를 사용하고있다.

VS를 사용하는 Windows 응용 프로그램 개발자는 플랫폼의 도메인에 중립적 인 측면을 공유하기 위해 clang + CodeBlocks를 사용하고 있습니다.

+1

VC++ <-> MinGW. VC++는 GUI가 아닙니다. 명령 줄 인터페이스가 있습니다. – rubenvb

+0

"GUI 도구 체인"은 GUI가 아닙니다. 기본 설치에 GUI가 포함 된 도구 체인. –