Windows에서 C++ TR1 라이브러리 사용하기

이 문서는 번역서 C++ 표준 라이브러리 확장: 튜토리얼 및 레퍼런스를 보충하는 것으로, Windows에서 g++과 Boost.TR1을 이용해서 C++ TR1 라이브러리를 사용하는 방법을 설명한다. IDE로는 Dev-C++를 선택했으나, 컴파일러 패키지를 임의로 설정할 수 있는 다른 IDE(Code::Blocks, Turbo C++, Eclips CDT 등등)에서도 이 글과 본질적으로 동일한 방법을 적용할 수 있을 것이다.

Dev-C++ 설치

Dev-C++은 http://prdownloads.sourceforge.net/dev-cpp/devcpp-4.9.9.2_setup.exe 또는 http://sourceforge.net/project/showfiles.php?group_id=10639 에서 내려받을 수 있다.

내려받은 설치 프로그램을 실행해서 Dev-C++을 설치한다. 설치는 일반적인 Windows용 프로그램 설치와 다를 바가 없다. 이하의 글에서는 Dev-C++을 D:\Dev\Dev-Cpp 에 설치했다고 가정한다.

다음으로 Korean.lng(UI의 언어 파일)을 갱신한다. http://kldp.net/frs/?group_id=134&release_id=1455 에서 Korean.lng.4.9.9.2를 받아서 D:\Dev\Dev-Cpp\Lang에 Korean.lng라는 이름으로 저장하면 된다.

커스텀 Mingw 설치

TR1을 지원하는 g++ 4.2.x를 포함하는 커스텀 MinGW 패키지에는 여러 가지가 있지만, 여기서는 Stephan T. Lavavej이 만든 MinGW 패키지(이하 nuwen-MinGW)를 사용하기로 한다. 이 패키지는 무엇보다도 빌드된 Boost 라이브러리 전체를 포함하고 있다는 장점이 있다 (g++ 4.2.x는 아직 tr1::regex를 지원하지 않기 때문에 Boost의 것을 사용해야한다).

nuwen-MinGW의 최신 버전을 http://nuwen.net/mingw.html 에서 받는다. 이 글은 3.1 버전을 기준으로 한다.

따로 설치프로그램 없고, zip파일을 적당한 디렉터리에 풀면 된다. 이 글에서는 D:\Dev\Mingw 에 풀었다고 가정한다.

Dev-C++에서 nuwen-MinGW를 사용하도록 설정

다음으로, Dev-C++이 nuwen-MinGW를 사용하도록 설정한다.

새 컴파일러 설정 구성 만들기 및 기본 설정

우선 커스텀 MinGW를 사용하는 컴파일러 설정 구성을 새로 만든다. Dev-C++ 메인 메뉴의 도구 - 컴파일러를 클릭해서 "컴파일러 설정" 대화상자를 열고, "컴파일러" 탭에서 다음을 수행한다.

  • "컴파일러 설정 하기"의 녹색 [+] 버튼 클릭하고 새 설정 구성의 이름을 입력한다. 여기에서는 mingw-nuwen-3.1라고 하기로 한다.
  • "컴파일러 추가 명령"을 체크하고 -DBOOST_HAS_GCC_TR1를 추가한다.1
  • "다음의 링크 추가 명령 사용"을 체크하고 -lboost_regex를 추가한다.2

여기까지 하고 나면 대화상자는 다음과 같은 모습이 된다.

Image

디렉터리 설정

Dev-C++이 코드를 빌드할 때 참조하는 디렉터리들을 설정한다.

컴파일러 설정 대화상자의 "디렉터리" 탭의 각 하위 탭들을 다음과 같이 설정한다. 디렉터리 항목들의순서가 아주 중요함을 주의할 것.

실행 파일들

D:\Dev\MinGW\bin
D:\Dev\Dev-Cpp\bin

Image

라이브러리

D:\Dev\MinGW\lib

Image

C 헤더

D:\Dev\MinGW\include

Image

C++ 헤더 3

D:\Dev\MinGW\include\boost\tr1\tr1
D:\Dev\MinGW\lib\gcc\i686-pc-mingw32\4.2.1-dw2\include
D:\Dev\MinGW\include\c++4.2.1-dw2\backward
D:\Dev\MinGW\include\c++4.2.1-dw2\i686-pc-mingw32
D:\Dev\MinGW\include\c++4.2.1-dw2
D:\Dev\MinGW\include
D:\Dev\MinGW\include\c++4.2.1-dw\tr1

Image

이렇게 해서 Dev-C++에서 TR1을 사용하기 위한 준비가 끝났다.

프로젝트 설정에서 컴파일러 선택

마지막으로, TR1을 사용하는 프로젝트에서 방금 설정한 컴파일러 설정 구성을 사용하도록 설정해 주어야 한다. 메인 메뉴의 프로젝트 - 프로젝트 설정을 선택한 후 컴파일러 탭에서 mingw-nuwen-3.1을 선택해 주면 된다.

Image

시험

TR1 라이브러리를 시험해 볼만한 예제 소스로는 C++ 표준 라이브러리 확장: 튜토리얼 및 레퍼런스예제 코드가 적당할 것이다. (Dev-C++에서 프로젝트를 만들고 컴파일하는 방법은 따로 설명하지 않겠다.) g++의 TR1 구현과 Boost.TR1이 아직 완전하지 않기 때문에 예제 코드 모두가 제대로 컴파일되지는 않는다. 특히 C 호환성 부분과 수학 함수 관련 예제들은 대부분 컴파일되지 않는다. 그 외에 정규 표현식이나 튜플, 똑똑한 포인터 등은 제대로 컴파일, 실행되어야 한다. 그렇지 않으면 독자의 설정에 문제가 있거나 이 글에 나온 방법 자체에 뭔가 문제가 있는 것이다.

참고로, C++ 헤더 설정에 ...\boost\tr1\tr1 과 ...\c++4.2.1-dw\tr1 이 추가되어 있으므로, TR1 헤더를 포함시킬 때

 #include <tr1/헤더>

형태가 아니라 tr1/이 붙지 않은

 #include <헤더>

형태를 사용해야 한다. ...\boost\tr1 과 ...\c++4.2.1-dw 도 추가한다면 #include <tr1/헤더> 도 가능하겠지만 시험해 보지는 않았다.


  1. 이것은 Boost.TR1이 g++의 TR1 구현을 우선적으로 사용하게 만든다. 

  2. 정규표현식 지원을 위한 것이다. 

  3. 이와는 다른 디렉터리 순서도 가능할 수 있지만, 지금까지 실험해 본 바로는 이 순서가 문제(헤더 파일을 찾지 못하거나 식별자 정의가 소실되는 등)를 가장 적게 일으켰다.