기록 보관소 C++
2014년 9월 8일 월요일
clang version 3.5.0 Visual Studio Build 현재 상태.
clang version 3.5.0 Visual Studio Build 현재 상태.
Visual Studio 2012 로 빌드한, clang 3.5 는 현재,
윈도우즈에서 간단한 C++ 코드조차, 컴파일 하지 못한다.
간단한 C 코드는 컴파일 가능하다.
D:\>cd D:\DEV_LANG\Work_1
D:\DEV_LANG\Work_1>dir
D 드라이브의 볼륨: Data
볼륨 일련 번호: 0AA4-E023
D:\DEV_LANG\Work_1 디렉터리
2014-09-08 오후 02:11 <DIR> .
2014-09-08 오후 02:11 <DIR> ..
2014-09-07 오전 08:42 76 a.c
2014-09-08 오후 02:11 39,387 a.exe
2014-09-07 오전 10:32 62 bb.cpp
2014-09-08 오후 07:23 564 clang-build-1.bat
2014-09-08 오후 02:07 454 clang-build-2.bat
5개 파일 40,543 바이트
2개 디렉터리 148,957,941,760 바이트 남음
D:\DEV_LANG\Work_1>
D:\DEV_LANG\Work_1>
D:\DEV_LANG\Work_1>type a.c
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
D:\DEV_LANG\Work_1>clang --version
clang version 3.5.0 (tags/RELEASE_350/final)
Target: i686-pc-windows-msvc
Thread model: posix
D:\DEV_LANG\Work_1>clang a.c
D:\DEV_LANG\Work_1>dir
D 드라이브의 볼륨: Data
볼륨 일련 번호: 0AA4-E023
D:\DEV_LANG\Work_1 디렉터리
2014-09-08 오후 09:43 <DIR> .
2014-09-08 오후 09:43 <DIR> ..
2014-09-07 오전 08:42 76 a.c
2014-09-08 오후 02:11 39,387 a.exe
2014-09-08 오후 09:43 57,344 a.out
2014-09-07 오전 10:32 62 bb.cpp
2014-09-08 오후 07:23 564 clang-build-1.bat
2014-09-08 오후 02:07 454 clang-build-2.bat
6개 파일 97,887 바이트
2개 디렉터리 148,957,884,416 바이트 남음
D:\DEV_LANG\Work_1>a.exe
hello world
D:\DEV_LANG\Work_1>dir
D 드라이브의 볼륨: Data
볼륨 일련 번호: 0AA4-E023
D:\DEV_LANG\Work_1 디렉터리
2014-09-08 오후 09:43 <DIR> .
2014-09-08 오후 09:43 <DIR> ..
2014-09-07 오전 08:42 76 a.c
2014-09-08 오후 02:11 39,387 a.exe
2014-09-08 오후 09:43 57,344 a.out
2014-09-07 오전 10:32 62 bb.cpp
2014-09-08 오후 07:23 564 clang-build-1.bat
2014-09-08 오후 02:07 454 clang-build-2.bat
6개 파일 97,887 바이트
2개 디렉터리 148,957,884,416 바이트 남음
D:\DEV_LANG\Work_1>type bb.cpp
#include <iostream>
int main() {
std::cout << "hi";
}
D:\DEV_LANG\Work_1>clang bb.cpp
In file included from bb.cpp:1:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\istream:6:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ostream:796:3: error:
cannot compile this try statement yet
_TRY_IO_BEGIN
^~~~~~~~~~~~~
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ostream:19:24: note:
expanded from macro '_TRY_IO_BEGIN'
#define _TRY_IO_BEGIN _TRY_BEGIN /* begin try block */
^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstddef:30:21: note:
expanded from macro '_TRY_BEGIN'
#define _TRY_BEGIN try {
^
In file included from bb.cpp:1:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\istream:6:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ostream:171:3: error:
cannot compile this try statement yet
_TRY_BEGIN
^~~~~~~~~~
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstddef:30:21: note:
expanded from macro '_TRY_BEGIN'
#define _TRY_BEGIN try {
^
In file included from bb.cpp:1:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\streambuf:6:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xiosbase:306:4: error:
cannot compile this throw expression yet
_RERAISE;
^~~~~~~~
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstddef:36:19: note:
expanded from macro '_RERAISE'
#define _RERAISE throw
^~~~~
In file included from bb.cpp:1:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\streambuf:6:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xiosbase:308:4: error:
cannot compile this throw expression yet
_THROW_NCEE(failure, "ios_base::badbit set");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstddef:46:30: note:
expanded from macro '_THROW_NCEE'
#define _THROW_NCEE(x, y) throw x(y)
^~~~~~~~~~
In file included from bb.cpp:1:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\streambuf:6:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xiosbase:310:4: error:
cannot compile this throw expression yet
_THROW_NCEE(failure, "ios_base::failbit set");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstddef:46:30: note:
expanded from macro '_THROW_NCEE'
#define _THROW_NCEE(x, y) throw x(y)
^~~~~~~~~~
In file included from bb.cpp:1:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\streambuf:6:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xiosbase:312:4: error:
cannot compile this throw expression yet
_THROW_NCEE(failure, "ios_base::eofbit set");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstddef:46:30: note:
expanded from macro '_THROW_NCEE'
#define _THROW_NCEE(x, y) throw x(y)
^~~~~~~~~~
In file included from bb.cpp:1:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\streambuf:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\xiosbase:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\xlocale:8:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INC
LUDE\stdexcept:7:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstring:2195:3: error:
cannot compile this try statement yet
_TRY_BEGIN
^~~~~~~~~~
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstddef:30:21: note:
expanded from macro '_TRY_BEGIN'
#define _TRY_BEGIN try {
^
7 errors generated.
D:\DEV_LANG\Work_1>
2013년 11월 6일 수요일
C++ 컴파일러 선택의 문제.
C++ 컴파일러 선택의 문제.
32bit 인가. 64bit 인가.
Exception handling 은 무엇인가? ( SJLJ, DWARF, and SEH )
Threading model 은 posix thread 인가 win32 threaad 인가.
MinGW 인가 TDM-GCC 인가.
http://qt-project.org/wiki/MinGW-64-bit
http://tdm-gcc.tdragon.net/quirks
http://mingw-w64.sourceforge.net/
2013년 10월 19일 토요일
LLVM Introduction
Introduction to the LLVM Compiler System.
http://llvm.org/pubs/2008-10-04-ACAT-LLVM-Intro.pdf
2008 년 문서로 추정된다.
LLVM 에대한 개념을 설명한 문서다.
LLVM Project 란 무엇인가?
New compiler architecture built with reusable components.
다음과 같은 여러가지 컴파일러 기술로 이루어져있다.
- Optimizer , Code Generator
- llvm-gcc, Clang Front ends
- 그외 기타등등...
http://llvm.org
그런데, 왜?
그런데, 왜 이 시점에 뜬금없이 C 컴파일러를 또 만든단 말인가?
이미 세상에는 GCC, Xcode, Visual Studio ... 등등 수 많은 C 컴파일러가 있는데..
왜. 하필이면. 또 C 컴파일러란 말인가?
그 이유는.
1. 기존 오픈소스 C Compiler 가 침체되었다고 보기 때문이다.
그렇게 보는 이유는 다음과 같다.
- 수십년된 code generation 기술을 기반으로 한다.
- cross-file optimization 과 같은 현대적 기술을 사용하지 않는다.
- code base 가 오래되서, 배우기 어렵고, 대대적인 변경이 어렵다.
- 다른 응용프로그램에서 컴파일러기술을 재사용하기 어렵다.
- 새로운 버전이 릴리스될때마다 속도가 더욱 느려진다.
(음... 일리 있네..)
그래서 현대적기술을 사용하여 컴파일러 요소기술을 만들었고,
이것을 모듈화 시킨것이 LLVM 이다.
이것이 좋다는것을 증명하려면, 이 요소기술위에서 돌아가는 컴파일러가 있어야 한다.
그래서, LLVM 개발자는 LLVM-GCC 4.2 를 만들었다.
LLVM-GCC 4.2 는 다음과 같은 특징을 가진다.
- C, C++, Objective C, Ada and Fortran
- Standard GCC command line option
- ....
즉, LLVM-GCC 4.2 는 C Front-end 는 GCC 4.2 를 쓰고, Optimizer 와 Code Generator 는 LLVM 을 쓰는 물건이다.
( 이걸 왜 이렇게 복잡하게 섞어 놓는거지..? )
이걸 이렇게 섞어서 LLVM 을 쓰면 다음과 같은 좋은 점이 생긴다.
1. 기존에는 없었던, Link Time Optimization 이라는 새로운 기능이 가능해진다.
2. 컴파일 시간이 줄어든다.
3. 실행시간이 빨라진다.
결론은 장점이 분명 존재한다.
기타 다음과 같은 LLVM 의 특징과 장점이 있다.
- 새로운 언어를 만들때 LLVM 을 target 으로 쓸수있다.
- Just-In-Time optimization 과 compillation 을 제공한다.
- Better tools for source level analysis of C/C++ program
LLVM 기술로 만들어진것중에 Clang 이란것이 있다.
Clang 은 이런것이다.
- C, Objective-C, and C++ front-end.
- GCC 와 호환성 유지.
- 컴파일 속도 향상.
- 알아보기 편한, 컴파일러 에러메시지.
( 별거아니네. 뭐야, GCC 랑 똑같은건가..? )
컴파일 속도는 GCC 보다 Clang 이 좀 빠른가 보네.
- C++11 support 에서도 Clang 은 뛰어나다.
C++11 compiler support shootout: Visual Studio, GCC, Clang, Intel
( http://cpprocks.com/c11-compiler-support-shootout-visual-studio-gcc-clang-intel/ )
- 이렇게 좋은 Clang 인데... Visual Studio 에서는, MinGW 에서는...
... Windows 에서는 아직 찬밥이라는 현실.
( http://llvm.org/docs/GettingStarted.html )
Windows8 에서 MinGW64 로는 빌드가 되지 않는다.
( MinGW32 로는 빌드가 된다. )
- LLVM, Clang 은 완료된 프로젝트가 아니다.
현재, 개발 진행중인 프로젝트다.
뭔가, 안되거나 없으면 정상이다.
예를 들어 Clang 링커가 없다면, 정상이다.
지금 개발 중이다.
The lld project aims to to be the built-in linker for clang/llvm.
Currently, clang must invoke the system linker to produce executables.
현재로서는, MinGW 에 있는 링커 또는 Visual Studio 에 있는 링커를 써야한다.
현재로서는, MinGW 에 있는 링커 또는 Visual Studio 에 있는 링커를 써야한다.
피드 구독하기:
글 (Atom)