BOOST LIBRARY : x86, x64, ia64 를 위한 부스트 컴파일 C/C++ 마을




                                                                               Get Boost



Boost C++ LibrariesBOOST 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 옵션용 라이브러리











2011. 7. 8

By. Anster







덧글

  • 찾고있던 사람 2011/11/28 01:27 # 삭제 답글

    찾고 있었는데 감사합니다!
  • 사랑아빠 2012/01/01 01:06 # 삭제 답글

    감사합니다. 많은 도움이 되었어요 ^^;
  • 데자와 2012/08/03 16:20 # 삭제 답글

    땡큐 베리 머치
  • 오곡 2012/12/11 23:13 # 삭제 답글

    감사합니다 좋은 내용입니다 ^^
  • 진우 2013/10/08 16:50 # 삭제 답글

    근데 thread filesystem 같은것들은 왜 컴파일 해야하나요?
    OS 종속적인 기능들이라 헤더파일만으로는 사용할수 없는건가요?
  • 김용인 2014/10/15 19:36 # 삭제 답글

    MT가 static 이고 MD가 shared 입니다 ^^; 거꾸로 쓰셨네요
  • 코요 2017/03/19 23:52 # 삭제 답글

    흑흑... 거꾸로 쓰시는 바람에 빌드 시간을 날려부럿숩니다ㅜ
댓글 입력 영역


시계

라운드 시계

위키피디아