Windows에서 Clang을 컴파일하는 방법
Clang이 Windows에서 작업할 수 있도록 방법을 찾고 있지만 문제가 있습니다.Clang이 컴파일을 성공시켰지만 프로그램을 컴파일하려고 하면 표준 헤더에 오류가 많이 발생합니다.
rubenvb의 훌륭한 사전 빌드 버전의 clang은 알고 있습니다만, 스스로 컴파일 하고 싶습니다.또, 아직 Windows 의 서포트가 그다지 좋지 않다고 하는 Going Native 의 강연도 듣고 있었습니다.Windows에서 작업하려면 어떻게 해야 하나요?
Windows 7에서 C++용 clang을 컴파일하기 위해 다음 방법을 사용했습니다.Mysticial 및 기타에 의해 검증되었습니다.
- MinGW를 다운로드하여 설치합니다(C++ 컴파일러를 설치하고 bin 폴더를 PATH에 넣습니다(MinGW 4.6.1이 있으며 4.6.2가 설치된 다른 컴퓨터에서 정상적으로 테스트되었습니다).
- PATH에 Python이 있는지 확인합니다(3개가 아니라 2.7이 있습니다).
- (옵션: PATH에 Perl이 포함되어 있는지 확인합니다(ActivePerl 5.14.2 64비트를 사용).
- CMake를 취득하여 PATH에 배치하다
- LLVM 다운로드 페이지로 이동하여 Clang 소스 코드와 함께 LLVM 3.0 소스 코드를 다운로드합니다.SVN에서 코드를 가져오지 마십시오. MinGW 헤더에서는 작동하지 않습니다.
- 소스 코드를 추출합니다.데스크탑의 llvm-3.0.src라는 폴더에 llvm 소스가 있습니다.
- clang 소스를 직접 llvm 소스 폴더 내의 "도구" 폴더에 있는 "clang" 폴더에 넣습니다(정확히 "clang"이라고 부르지 않으면 llvm을 빌드하지만 clang은 빌드되지 않습니다). 그러면 디렉토리가 다음과 같이 됩니다.
- llvm 소스
- autoconf 폴더
- ...
- 도구 폴더
- ...
- 쨍그랑 폴더
- 바인딩 폴더
- ...
- 파일 만들기
- ...
- ...
- ...
- llvm 소스
- llvm 소스 폴더와 같은 디렉토리에 "build"라는 이름의 폴더를 만듭니다.
- 명령줄과 cd를 빌드 폴더로 엽니다.
명령어를 실행합니다.
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ..\llvm-3.0.src
(마지막 인수는 llvm 소스(및 tools/clang 서브디렉토리의 clang 소스)가 있는 폴더의 상대 경로입니다).
이렇게 하면 "configure" 명령어와 동일한 작업이 수행되며 makefile 및 모든 것이 빌드 폴더에 생성됩니다.
- 이 작업은 몇 분 정도 걸립니다.
명령어를 실행합니다.
mingw32-make
- 그러면 llvm과 clang이 컴파일되고 clang 실행 파일이 빌드/bin 폴더에 생성됩니다.
- 이것은 시간이 오래 걸릴 것이다.(병렬 빌드를 추가하여 속도를 높일 수 있습니다.
-j<number>
옵션)컴파일러가 쓰고 있는 폴더에 잠금을 가하는 등 오랜 시간이 걸리는 컴파일 프로세스를 방해하지 않도록 다른 프로그램을 모두 닫는 것이 좋습니다.생성된 파일을 스캔하여 방해가 되지 않도록 바이러스 백신 및 방화벽 소프트웨어도 껐습니다.
테스트 시간
build/bin 폴더에 .cpp 파일을 만듭니다(hello.cpp 사용).표준 라이브러리 헤더를 사용하여 포함 경로 및 라이브러리가 작동하는지 확인합니다.아주 간단한 프로그램부터 시작하세요.
(처음부터:
#include <iostream> int main() { std::cout << "hi"; }
)
명령어를 실행합니다.
clang hello.cpp -std=c++0x -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++" -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++\mingw32" -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../.. -L/mingw/lib -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt
(-L은 라이브러리를 검색할 디렉토리를 지정하고 -l은 링크할 라이브러리를 지정합니다.) (MinGW가 나와 같은 경로에 설치되어 있지 않은 경우 "g++ somefile.cpp -v" 명령을 사용하여 경로를 검색하여 g++가 라이브러리 경로 및 라이브러리 파일에 어떤 옵션을 사용하고 있는지 알 수 있습니다.-L 및 -l 옵션의 출력 끝 부근에 있습니다.-L이 포함된 .o 파일 이름에 주의하십시오.Clang은 g++와 같은 옵션을 많이 사용하기 때문에 g++의 출력에서 그 행을 문자 그대로 복사하여 붙여넣었습니다.)
그러면 프로그램이 컴파일되고 a.out이라는 이름의 파일이 생성됩니다.
a.out의 이름을 a.exe로 변경합니다.
- .exe를 실행합니다.
- 프로그램이 실행되어야 합니다.
Clang(3.0)은 Windows에서 아직 문제가 있습니다(Linux에서도 문제가 발생하고 있는지 모르겠습니다).예를 들어 lamda(clang은 지원하지 않음)를 -std=c++0x로 컴파일하면 clang이 크래쉬하고 진단 오류가 발생합니다.(llVM IRC에서 clang이 람다에 대해 파싱을 구현하지만 의미 분석은 구현하지 않기 때문에 3개의 램다를 파싱하는 것을 잊었기 때문에)릴리스) 및 이미 이 버그에 대해 알고 있습니다.)
또한 저명한 Mysticial은 이 가이드를 테스트하는 데 친절히 동의하고 테스트 중에 몇 가지 관찰을 했습니다.
- Windows 헤더는 동작하고 있는 것 같습니다.
- 현재 32비트에서만 작동합니다.
- 64비트는 컴파일은 정상적으로 되지만 조립은 되지 않습니다.
- SSE는 괜찮을 겁니다.([Mysticial]는 32비트로 동작하는SSE를 테스트하지 않았습니다).
다음은 Windows 8.1 환경에서 동작하는 것으로, Seth의 지시와 전체적으로 비슷하지만, 보다 새로운 툴로 동작합니다.
- MinGW 64를 설치했습니다.
C:/MinGW
정확히 말하면 STL의 디스트로(distro)를 사용하고 있습니다. - Python 3를 설치했는데 최신 버전을 가져왔어요.
- CMake 3.0.2를 설치했습니다.
- LLVM과 Clang을 Github으로 분기하여 기계에 복제하고 Clang의 repo를 llvm\tools\clang 폴더에 저장했습니다(이 구조는 공식 페이지에 기술되어 있습니다.git 대신 svn으로 표시됩니다).
- "llvm" 폴더 옆에 "build" 폴더를 만들고 "build" 폴더 내에서 다음 명령을 실행했습니다.
cmake -G "MinGW Makefiles" -D"CMAKE_MAKE_PROGRAM:FILEPATH=C:/MinGW/bin/make.exe" -DCMAKE_BUILD_TYPE=Release ..\llvm
(어떤 이유로 CMake가 자동으로 "make"를 찾을 수 없었습니다.) - 그리고 실제로 만들기 위해 "만들기"를 실행했습니다.두 시간 정도 걸렸어요
- 그 후 다른 폴더에 1.cpp를 작성했습니다.이 폴더에서는 람다 식을 실행하여 "hi"를 인쇄합니다.
#include <iostream> int main() { []{ std::cout << "hi"; }(); }
- cpp를 컴파일하기 위한 cmd 파일도 만들었습니다.또는 다른 방법을 통해 PATH 변수를 올바르게 설정할 수도 있습니다.MinGW 패키지의 GCC 버전이 다를 수 있습니다.또한 Clang에는 몇 가지 내장 경로가 있지만 특정 GCC 버전에 연결되어 있으며, 내 경로는 이 버전에 포함되어 있지 않기 때문에 포함 경로를 명시적으로 제공해야 했습니다.
set PATH=<path to the build folder from step 5>/bin;c:/mingw/bin;%PATH% clang++ -std=c++11 1.cpp -o 1.exe -I"C:/MinGW/include" -I"C:/MinGW/include/c++/4.9.1" -I"C:\MinGW\include\c++\4.9.1\x86_64-w64-mingw32" -I"C:\MinGW\x86_64-w64-mingw32\include"
- 이 cmd를 실행하면 1.cpp가 "hi"로 인쇄된 1.exe로 컴파일됩니다.
기능하지 않은 점:
- VS 2015 CTP의 MSVC 컴파일러를 사용하여 MinGW+GCC 없이 동일한 llvm+clang 소스를 구축해 보았습니다.Clang은 정상적으로 구축되었습니다.단, 다른 점은 Developer CMD 창에서 실행할 필요가 있다는 것입니다.
cmake -G "Visual Studio 12" ..\llvm
Visual Studio에서 솔루션을 컴파일합니다.단, Clang은 샘플 cpp를 컴파일하지 못했기 때문에 MinGW 표준 라이브러리 헤더 내의 "미신고 식별자 "char16_t" 및 "_int128은 이 타깃에서 지원되지 않습니다"에 대해 불만을 제기했습니다.clang-cl 헤더와 MS STL 헤더를 사용하면 "throw x(y)" 지정자에 대한 불만이 제기됩니다. 빌드에 추가 키를 제공해야 하는데 작동하지 않습니다.
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xiosbase(293,4) : 오류: 아직 이 슬로우 식을 컴파일할 수 없습니다_THROW_NCEE(실패, "ios_base:eofbit set"); C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstdef(56,30): 메모: 매크로 '_SLOW_NCEE' #define _SLOW_NCEE(x, y) throw x(y)에서 확장되었습니다.
http://clang.llvm.org/get_started.html#buildWindows 를 참조해 주세요.
"Visual Studio 11 Win64"를 cmake와 함께 사용하여 현재 사용 가능한 VS Express for Desktop과 연동됩니다.
lib에는 MinGW-W 64를 사용하고 있으며, 누락된 파일에는 SUA를 사용하고 있습니다.http://mingw-w64.sourceforge.net/ 및 http://www.suacommunity.com/
W64 바이너리에서 사용하기 위해 clang++에 의해 컴파일된 .o를 링크하기 위해 W64의 성과물에 포함된 ld linker와 함께 -m i386pep를 사용합니다.
VS를 사용하여 LLVM을 구축하고 Unix 사용자가 되어 명령줄에서 소스를 구축하는 데 많은 문제가 있었습니다.
Seth Carnegie의 지시에 따라 제공된 패키지가 아닌 SVN 저장소에서 LLVM v3.3과 MinGW v4.5.2를 사용하여 구축했습니다.
언급URL : https://stackoverflow.com/questions/9427356/how-to-compile-clang-on-windows
'programing' 카테고리의 다른 글
rest API를 사용하여 앱 부팅 시 Vuex 스토어를 올바르게 초기화하려면 어떻게 해야 합니까? (0) | 2022.08.12 |
---|---|
Vuejs가 입력의 포커스를 잃을 때까지 모델을 업데이트하지 않는 이유 (0) | 2022.08.12 |
java.lang의 차이.RuntimeException 및 java.lang.예외. (0) | 2022.08.12 |
malloc()와 free()는 어떻게 동작합니까? (0) | 2022.08.12 |
버퍼 오버플로는 gdb에서 동작하지만 없으면 동작하지 않는다. (0) | 2022.08.11 |