64位Linux下编译x86版本Boost库 (及相关库的编译)

用的是boost 1.55.0,正常编译的话下面命令及参数就可以了:

1
./bjam  --without-python  --without-test --without-graph_parallel --without-graph --without-wave toolset=gcc cxxflags="-std=c++11"  install

如果要编译32位版本的话需要先安装boost需要的几个库的x86版本

1
2
yum install libicu-devel.i686
yum install bzip2-devel-1.0.5-7.el6_0.i686

如果是用ICU库编译boost.locale库, 那就需要第一行,如果用libiconv库去编译boost.locale库的话需要手动编译安装libiconv库,下载libiconv库,用下面的参数configure:

1
./configure --prefix=/usr CFLAGS="-m32" LDFLAGS="-m32" --enable-static --enable-shared --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu

接下来编译boost:

1
./bjam --prefix=/usr --without-python  --without-test --without-graph_parallel --without-graph --without-wave toolset=gcc address-model=32 architecture=x86  install

最后一个参数很重要, 如果只是指定了address-model=32,会编译出大部分的boost库的x86版本, 但是会提示有几个target failed,库不完整, 尤其是boost.locale库,会提示:

- iconv (libc)             : no
- iconv (separate)         : no
- icu                      : no
- icu (lib64)              : no
Boost.Locale needs either iconv or ICU library to be built`.
Boost.Locale needs either iconv or ICU library to be built.`
Boost.Locale needs either iconv or ICU library to be built.

而事实上已经安装了icu或者libiconv的正确版本,但是boost无法识别, 需要指定architecture=x86 后才会识别到,并正确安装.