Boost + Visual Studio 환경에서 라이브러리 빌드

Boost 버전: 1.61.0
Visual Studio 버전: Community 2015

Boost는 헤더만 include하면 되는것이 기본이지만 아래와같은 라이브러리는 빌드해야한다.
Chrono, Context, Filesystem
GraphParallel, IOStreams
Locale, MPI, ProgramOptions
Python, Regex, Serialization
Signals, System, Thread, Timer, Wave

아래 라이브러리는 상황에 따라 빌드 필요.
DateTime, Graph, Math
Random, Test, Exception

참고: http://www.boost.org/doc/libs/1_61_0/more/getting_started/windows.html#header-only-libraries
다운로드: http://www.boost.org/users/download/

빌드 방법:

1. VS에서 재공되는 네이티브 도구모움 프롬프트 환경으로 콘솔 실행. 필요한 라이브러리가 32비트용이면 x86, 64비트용은 x64 도구 실행.
visual studio prompt search


2. Boost.Build system 빌드.
bootsrap 스크립트로 간단하게 빌드할 수 있으며, tools\build 폴더에서 빌드하여 원하는 폴더에 b2 파일을 설치(복사)할 수 있다. 오픈소스를 빌드하여 사용하는것에 익숙하지 않다면 tools\build 폴더에서 빌드하지 말고 그냥 bootstrap 스크립트로 b2.exe 파일을 빌드하는게 편하다. (어차피 Boost.Build 형식의 프로젝트를 만들어서 사용 할 일이 없을테니까.)

먼저 boost를 다운로드 받고, 압축을 풀면 파일명과 동일한 폴더에 소스파일들 풀린다(boost_1_61_0.7z 파일을 받고 현재 폴더에 압축 풀기로 풀었다면 boost_1_61_0 폴더에 소스코드들이 위치). 해당 폴더로 프롬프트에서 이동 한 다음 ‘bootstrap’ 파일을 실행하면 된다.
콘솔 명령을 모른다면 이 글을 참조: 프롬프트 명령 사용

boost b2 build
1~2분 정도면 b2 파일 빌드가 완료되었다는 메시지와 간단한 도움말이 표시된다. 일반적으로 project-config.jam 파일을 수정 할 일은 없을것이다.


3. Boost library 빌드.
바로 b2를 실행하면 기본 옵션으로 빌드가 된다. 1.61.0 기준으로 기본 옵션은 다음과같다.
–stagedir=.\stage
–build-type=minimal
더 있지만 그다지 중요성이 없어 더 분석하지 않았다(…).

‘b2 –help’로 도움말을 보면 특정 라이브러리만 빌드할 수 있는 –with- 로 시작하는 옵션이 있다. 이 옵션에 사용할 수 있는 라이브러리를 보려면  ‘b2 –show-library’로 명령을 실행하고 1~2분 정도 기다리면 Boost에서 빌드할 수 있는 라이브러리 목록이 나타난다.

boost libraries
만약 고정밀 타이머등을 위해 chrono가 필요하다면 –with-chrono 옵션을 주면 된다. (여담이지만 VS 2013 기준 C++11에서는 고정밀 타이머가 완전하게 구현 안되어있다고… 2015에서도 마찬가지인지 모르겠다.)

즉, ‘b2 –with-chrono’ 명령을 주면 chrono 라이브러리만 빌드하므로 불필요한 빌드 시간이 들어가지 않게된다. 종속성이있는 라이브러리들도 있지만 어차피 빌드할 때 링크 실패한 파일이름을 보면 대강 어떤 라이브러리를 더 빌드해야할지 알 수 있으며, 문서에 기술 된 종속성을 보고싶다면 http://www.boost.org/doc 페이지의 각각의 라이브러리 문서에서 확인 가능.

–build-type 옵션이 minimal일경우 static library 형식으로 빌드되며, complete로 옵션을 주면 static, shared library 둘 다 빌드된다. 보통은 따로 이 옵션을 주지 않아도 되지만 만약 링크가 안되면 complete로 옵션을 주어 다시 빌드하면 된다. 예를들어 chrono만 빌드하며 static/shared 형식의 라이브러리 모두 빌드한다면 ‘b2 –with-chrono –build-type=complete’

Ogre 라이브러리를 빌드하기 위해서 필요했던 라이브러리는 date_time, thread, system이였다. 이때는 ‘b2 –with-date_time –with-thread –with-system’으로 빌드하면 된다.

만약 64비트 라이브러리로 빌드한다면 ‘b2 address-model=64’와 같이 address-model을 64로 지정해야 64비트 라이브러리가 빌드된다. (위에서 도구 명령 띄울 때 64비트 도구 명령  프폼프트로 커맨드 라인을 실행해야 함.)

32비트와 64비트 라이브러리 둘 다 필요하다면 32비트 도구 명령 프롬프트에서 ‘b2 -stagedir=stage32’로 한번 빌드, 64비트 도구 명령 프롬프트에서 ‘b2 –stagedir=stage64’로 한번 더 빌드해야한다. (stage32, stage64는 원하는 이름으로 해도 상관없다.)

boost build complete
위 화면은 ‘b2 address-model=64 –stagedir=stage64’ 명령으로 모든 라이브러리, 64비트로 빌드하여 완료 된 모습이다. include와 library 경로에 어떻게 입력하면 되는지 잘 설명되어있다.


4. include/library 경로 설정
VS에서는 boost가 필요한 프로젝트에서 속성을 열고 포함 디렉터리, 라이브러리 디렉터리에 각각 include 경로와 library 경로를 입력하면 된다.

project popup
프로젝트에서 우클릭하여 속성.

project property
포함 디렉터리와 라이브러리 디렉터리에 각각 위와같이 빌드 완료 후 표시 된 경로를 ‘편집’에서 입력하면 된다.


추가내용

1.55 버전에서는 Xcode의 clang을 사용하여 빌드 시 gcc-atomic.hpp파일에서 에러가 났었다. 아래 두가지 패치를 해줘야 빌드가 되었었다.

– PATH1: https://github.com/boostorg/atomic/commit/e4bde20f2eec0a51be14533871d2123bd2ab9cf3
– PATH2: https://github.com/boostorg/atomic/commit/6bb71fdd8f7cc346d90fb14beb38b7297fc1ffd9

Boost 1.55버전, Visual Studio 2010 조합에서는 –build-type를 complete로 하지않으면 shared library가 없어 링크가 안되었는데 이번에 확인해 본 Boost 1.61.0, Visual Studio 2015 조합에서는 알아서 static library로 링크가 된다는게 신기하다. 그사이에 무언가 바뀐게 있나보다(…)

PS) 역시나 혼자보기위해 evernote에 기록한 문서는 10줄 정도에 필요한 정보 다 기록할 수 있었지만 이걸 포스팅으로 하려니 쓸대없이 장황해진다(…)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

*
*

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.