boost 사용하기..

1. 설치 하기..

BOOST LIBRARY 를 다운받는다.

현재 ( 2011. 7. 8 ) 최신 릴리즈는 1_46_1 이다. zip 파일을 다운받아서 원하는 곳에다가 압축을 푼다.

폴더 내에 내 구성이 다음과 같을 것이다.

이중에서, 위에서 선택된 bootstrap 을 이용해서 bjam 을 만들것이다. bjam 은 일종의 파서다. 사용자가 입력한 옵션을

파싱해서 입력된 옵션에 맞게 부스트 컴파일을 위해 각종 파일들을 세팅 해 준다.

이제 컴파일 할 대상 플랫폼이 무엇인지 결정하고, 그에 맞게 컴파일러를 고르면 된다. 아래 그림을 보자.

Visual Studio 2010은 크로스 컴파일러를 설치하면 이렇게 4가지 종류의 컴파일러를 제공한다.

– Visual Studio Itanium Cross Tools 명령 프롬프트(2010)

 

– Visual Studio x64 Cross Tools 명령 프롬프트(2010)

 

– Visual Studio x64 Win64 Tools 명령 프롬프트(2010)

 

– Visual Studio 명령 프롬프트(2010)

Itanium Cross 컴파일러는 X86 시스템에서 IA64 코드를 생성할 수 있도록 도와준다.

x64 Cross 컴파일러는 X86 시스템에서 X64 코드를 생성할 수 있도록 도와준다.

x64 Win64 컴파일러는 X64 시스템에서 X64 코드를 생성할 수 있도록 도와준다.

마지막 4번째는 기본적으로 제공되는 컴파일러로 X86 시스템에서 X86 코드를 생성할 수 있도록 도와준다.

자신의 시스템에 맞게 컴파일러를 고르면 된다. X64(AMD64, EMT64) 시스템은 4가지 모두를 사용할 수 있지만

X86 시스템에서는 x64 Win64 컴파일러를 사용 할 수 없다.

자신의 시스템에 맞는 컴파일러를 선택한 뒤 %BOOSTROOT%(부스트 루트 폴더, 이하 %BOOSTROOT% 라 부르겠다. )

로 이동해서 bootstrap 을 실행시키면 해당 시스템(아키텍쳐에) 맞게 %BOOSTROOT%에 bjam.exe 응용프로그램이

생성된다. 여기서 생성된 bjam은 x86용 응용프로그램이더라도 x64용 boost library 를 생성할 수 있다. bjam 은 단지

세팅 툴이다. boost library를 빌드 할때 쓰는 컴파일러만 x86 to x64 크로스 컴파일러면 된다.

생성된 bjam을 이용해서 부스트 라이브러리를 컴파일 해 보자. 컴파일러를 실행한 뒤 %BOOSTROOT% 로 이동한다.

여기서는 x86 to x64 Cross 컴파일러를 사용하겠다. 본인의 운영체제가 x64 Windows 라면 x64 Win64 컴파일러를 이용하면

부스트를 빌드하는데 걸리는 시간을 절약 할 수 있다.

boost 는 헤더만 추가해도 사용할 수 있는 라이브러리와 그렇지 않은 라이브러리로 나뉘어진다. –show-libraries 옵션을

이용해 확인 할 수 있다. 우리가 boost 를 컴파일 하는 이유는 이런 라이브러리들을 사용하기 위함이다.

boost library 는 두가지 방법으로 설치 할 수 있다. 만약, 처음 설치한다면 헤더 파일과 라이브러리 파일이 필요하므로

두가지를 모두 설치하는 Install 방법을 이용하면 된다. 두번째 방법은 라이브러리 파일만 빌드 하는 방법인데, 이미 이전에

Static 빌드로 부스트를 Install 해 놓았고 새로이 Shared 라이브러리만 필요하다면 Stage 방식으로 라이브러리만 빌드하면 된다.

두가지 방식의 옵션에 관해서는 아래 링크를 참조하면 된다.

bjam 의 옵션은 다음의 링크에서 확인할 수 있다.

x86 to x64 크로스 컴파일러를 선택했으므로 컴파일 하기위한 bjam 옵션에 대해서 알아보자.

–toolset=msvc-10.0

: Visual Studio 2010 을 이용해 컴파일함을 알려준다. 다른 버전을 사용할 경우에는 그에 맞는 버전을 지정하면 된다.

–architecture=x86

: 아키텍쳐를 지정한다. x86이나, x64라면 디폴트 값으로 x86으로 지정되고 IA64의 경우에는 –architecture=ia64

address-model=64

: 주소 모델을 지정한다. x64로 빌드할것이므로 64 를 지정한다. 지정안한다면 32가 디폴트 값으로 사용된다.

link=static

: 어떤 형태로 빌드할 것인지 나타낸다. static(lib), shared(dll) 두가지 옵션이 있다. link=static,shared 로 둘다 지정도 가능

runtime-link=static,shared

: 사용하는 C – Runtime Library 를 어떻게 연결할 것인지를 나타낸다. 나는 둘 다 지정했다.

variant=release

: 빌드된 라이브러리가 릴리즈용인지, 디버그 용인지를 나타낸다. variant=release,debug 와 같이 지정도 가능.

–without=mpi

 

–without=python

: 부스트 라이브러리는 사용을 위해 또 다른 라이브러리가 이미 설치 되 있어야 하는 경우도 있다. MPI 가 그 경우.

  나는 MPI와 파이썬을 사용하지 않으므로 둘 다 빌드하지 않겠다는 옵션을 주었다.

–stagedir=stage64_lib_release 

: 빌드된 라이브러리들이 위치 할 폴더. %BOOSTROOT% %STAGEDIR% 에 생성된다.

stage

: Stage 옵션. 헤더파일을 제외하고 라이브러리만 생성한다.

-j 2

: 쓰레드를 이용해 동시에 몇개의 작업을 할 것인가, 이경우는 두개의 작업을 동시에 하겠다고 옵션을 주었다.

생성된 라이브러리는 아래와 같다.

생성된 부스트 라이브러리 네이밍에 대해서 알아보자.

boost

: 이 파일이 link=shared 옵션으로 생성된 DLL 파일임을 나타낸다. LIB 파일이라면 libboost 로 시작한다.

libboost

: 이 파일이 link=static 옵션으로 생성된 LIB 파일임을 나타낸다.

data_time

: 라이브러리 이름을 나타낸다

vc100

: 컴파일하는데 사용된 툴과 버전을 나타낸다. vc 10.0 버전을 사용하였다.

mt

: 이 멀티 쓰레드용 부스트 라이브러리임을 나타낸다.

s

: runtime-link=static 옵션으로 C – Runtime Library 가 static 으로 링크 되었음을 알려준다.

g

: variant:debug 옵션으로 C – Runtime Library 가 디버그 버전으로 링크 되었음을 알려준다.

d

: variant:debug 옵션으로 이 부스트 라이브러리가 디버거 버전으로 컴파일 되었음을 알려준다.

1_46_1

: 부스트 라이브러리의 버전을 알려줌

LIB 파일들을 정리해보면,

libboost_mt 

: 멀티 쓰레드용 릴리즈 버전, C Runtime Library 는 shared 방식으로 링크됨. 비주얼 스튜디오 /MT 옵션용 라이브러리

libboost_mt_gd

: 멀티 쓰레드용 디버그 버전, C Runtime Library 는 shared 방식으로 링크됨. 비주얼 스튜디오 /MTd 옵션용 라이브러리

libboost_mt_s

: 멀티 쓰레드용 릴리즈 버전, C Runtime Library 는 static 방식으로 링크됨. 비주얼 스튜디오 /MD 옵션용 라이브러리

libboost_mt_sgd

: 멀티 쓰레드용 디버그 버전, C Runtime Library 는 static 방식으로 링크됨. 비주얼 스튜디오 /MDd 옵션용 라이브러리

                 – http://lyb1495.tistory.com/tag/boost naming

내가 사용하는 옵션은..

c:boost_1_57_0>bjam –toolset=msvc-12.0 link=static runtime-link=static,shared  variant=release,debug –architecture=x86 address-model=64 threading=multi stage  -j8


One Response to boost 사용하기..

  1. Avatar andrew
    andrew says:

    이게 맞는 듯.

    b2 -a –toolset=msvc-12.0 variant=debug,release link=static threading=multi runtime-link=static –architecture=x86 address-model=64 –stagedir=x64 -j8 stage