http://www.boost.org/
[build for linux]
boost library를 사용할 필요가 있어 빌드함.
linux 상에서의 기본 빌드는 간단하다.
http://www.boost.org/doc/libs/1_51_0/more/getting_started/unix-variants.html#easy-build-and-install
$ ./bootstrap.sh
$ ./b2
$ sudo ./b2 install
이렇게 하면 아래 path에 설치 됨.
headers : /usr/local/include/boost
libraries : /usr/local/lib
만약 빌드 중 gits/predefs.h 가 없다는 에러가 나오면 gcc-multilib를 설치
http://stackoverflow.com/questions/12591629/gcc-cannot-find-bits-predefs-h-on-i686
sudo apt-get install gcc-multilib
feature.h를 못찾겠다고 하면 아래 include 정보 추가
./b2 include=/usr/include
[cross compile for ARM architecture]
arm linux 용으로 빌드를 할 필요가 있어
cross compile을 하려면 다음과 같이 설정하고 빌드 하면 됨.
bjam cross compilation 설정
boost 폴더/tools/build/v2/user-config.jam 에 다음 정보만 입력
using gcc : arm : arm-none-linux-gnueabi-g++ ;
위 처럼 tool set name : version : invocation command 아니면 option을 입력
arm 용 cross compile 시에는 version 대신 arm을 기입했는데 상관 없는듯.
그리고 세번째 항목에는 컴파일러 빌드 명령과 option을 입력하는게 맞는데
option을 어떻게 설정하는지는 잘 몰라서 여기서 설정하지 않고 b2 실행 시 command line에서 입력 함.
참고로 아래 링크의 QnA에서 compile option을 compileflags 로 기입하는 것을 볼 수 있지만 실제 해봤을 때 boost 빌드에서 먹히지가 않았음.. http://stackoverflow.com/questions/15686972/how-to-change-check-the-compiler-used-by-b2-when-compiling-boost
using gcc : macports :
full/Path/g++-mp4.8 :
<compileflags>--sysroot=full/path/to/sysroot
;
빌드하면 boost documentation에서 보듯이 toolset과 target을 지정해서 빌드하면 됨.
# On windows box b2 toolset=gcc-arm target-os=linux # On Linux box b2 toolset=gcc-mingw target-os=windows
되지만 아래 설정이 되어 있는지 먼저 확인을 해봐야 한다.
1. user-config.jam에서 설정된 invocation command 경로가 $PATH에 추가 되어 있는지
추가 되어 있지 않았다면 추가하거나 아니며 user-config.jam에서 full path와 함께 command를 입력해라.
2. cross compile 시 필요한 include 파일이나 library들이 존재하는지
cross compile tool chain에서 제공하는 include 파일들과 library들이 어디에 있는지 경로를 확인해 두고 관련 에러 시 path를 명시해야 한다.
3. 빌드 에러 시 정확한 메세지 확인을 위해서는 -d+2 (debug message level), -q(error 발생 시 빌드 중지) 옵션을 사용
그래서 나는 일단 다음과 같이 빌드 하였음.
./b2 toolset=gcc-arm target-os=linux include=/home/ccc/arm-tool-chain/usr/include/ -d+2 -q
빌드 후 library들은 boost 폴더 내 stage/lib 폴더에 복사된다.
참고로 세부 빌드 옵션 설명은 다음 링크에서 설명하고 있음.
예를 들어 include path 추가는 include, library 형태(.a, .so)는 link, flag 추가는 cxxflags, cflags, linkflags 를 사용..
근데 shared library로 빌드하려니.. gcc 설정이 문제인지 빌드가 안된다.. 포기..
Table 4.2.
Feature | Allowed values | Notes |
---|---|---|
variant | debug,release | |
link | shared,static | Determines if Boost.Build creates shared or static libraries |
threading | single,multi | Cause the produced binaries to be thread-safe. This requires proper support in the source code itself. |
address-model | 32,64 | Explicitly request either 32-bit or 64-bit code generation. This typically requires that your compiler is appropriately configured. Please refer to the section called “C++ Compilers” and your compiler documentation in case of problems. |
toolset | (Depends on configuration) | The C++ compiler to use. See the section called “C++ Compilers” for a detailed list. |
include | (Arbitrary string) | Additional include paths for C and C++ compilers. |
define | (Arbitrary string) | Additional macro definitions for C and C++ compilers. The string should be either SYMBOL or SYMBOL=VALUE |
cxxflags | (Arbitrary string) | Custom options to pass to the C++ compiler. |
cflags | (Arbitrary string) | Custom options to pass to the C compiler. |
linkflags | (Arbitrary string) | Custom options to pass to the C++ linker. |
runtime-link | shared,static | Determines if shared or static version of C and C++ runtimes should be used. |
If you have more than one version of a given C++ toolset (e.g. configured in
user-config.jam
, or autodetected, as happens with msvc), you can request the specific version by passing toolset
-version
as the value of the toolset
feature, for example toolset=msvc-8.0
.
If a feature has a fixed set of values it can be specified more than once on the command line. In which case, everything will be built several times -- once for each specified value of a feature. For example, if you use
b2 link=static link=shared threading=single threading=multi
Then a total of 4 builds will be performed. For convenience, instead of specifying all requested values of a feature in separate command line elements, you can separate the values with commas, for example:
b2 link=static,shared threading=single,multi
The comma has this special meaning only if the feature has a fixed set of values, so
b2 include=static,shared
is not treated specially.