環境
操作系統:Ubuntu 16.04
編譯工具:gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu
boost源碼
地址:https://sourceforge.net/projects/boost/files/boost/
編譯
- 解壓,cd 到目錄
tar -zxvf boost_1_61_0.tar.gz
--show-libraries可查看所有庫

--without-libraries=, , , 逗號隔開去掉不想編譯的庫,--prefix=/../ 指定編譯后的安裝路徑
cd boost_1_61_0
./bootstrap.sh --prifix=./install
生成有 b2 和 bjam ,以及一個 project-config.jam 的文件,修改該文件的一行(指定自己的編譯器):
using gcc : : /home/ke/softwares/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc ;
注意:這中間是有空格的,如下圖標示的地方:

特別是最后一個分號前是有空格的,要不然會出錯。
2.執行 ./bjam 即可,這是編譯,創建的 lib 文件默認在 stage 文件夾
3. 編譯完后,執行 ./bjam install 即進行安裝,我的上面 --prefix=/.../ 指定的目錄就是安裝目錄
./bjam –help
常用選項(Options)和屬性(Properties)的說明,一般帶有–前綴的關鍵詞為option,沒有的則為property。
屬性
--show-libraries
顯示需要編譯才能使用的庫列表
–-build-type=minimal|complete
--build-type=minimal為默認值,此時在Linux下只編譯生成release版的動態鏈接C運行庫(C++標准庫)的多線程靜態庫和動態庫。
–build-type=complete,在Unix/linux下要編譯多個變體(debug或release,多線程或單線程,靜態庫或動態庫,靜態鏈接或動態鏈接C運行庫/C++標准庫)。不建議全部編譯,費時還費空間,提倡按需編譯。
--layout=versioned|tagged|system
決定需要編譯的庫名及頭文件的地址目錄名的生成策略。默認Windows下--layout=versioned,Linux下–layout=system。
當同時編譯多個版本時,最好設置–layout=versioned或–layout=tagged,否則編譯多半會失敗,原因是有的版本同時編譯若不指定命名策略,可能在輸出到指定目錄的時候造成命名沖突。
注:–build-type=complete時,不需要設置此屬性。但指定variant=debug,release等屬性時,須確保–layout=versioned或–layout=tagged。
--build-dir=DIR
指定存放編譯過程中生成的中間文件,目標文件等其他文件的目錄,默認在./bin.v2。
--with-libraries
創建和安裝指定的庫
--without-libraries
不對指定的庫進行創建和安裝,默認創建所有的庫
安裝:關鍵詞 install 或 stage
./bjam install
install會安裝頭文件和庫文件到相應指定目錄,頭文件安裝到/usr/local/include下,庫文件安裝到/usr/local/lib下。具體指定安裝目錄見./bjam –help。
./bjam stage
stage生成的庫文件到一個目錄下,通常默認就在./stage下。
注:install 和 stage 貌似不能同時使用,中間會卡住。若編譯過程中未指定install或stage,則生成的目標庫文件只存在於–build-dir所指的目錄中,默認為./bin.v2。考慮到此,若無需將頭文件和庫文件安裝,則推薦使用stage關鍵字。
屬性
toolset=toolset
指定編譯器,默認自動檢測,安裝了多個編譯器的時候可以使用此屬性。
variant=debug|release
指定編譯debug或release版本。
link=static|shared
指定創建靜態庫或動態庫
runtime-link=static|shared
指定創建的庫是靜態鏈接還是動態鏈接到C運行庫(或C++標准庫),這個選項需依據–link的類型,不同的編譯器允許的鏈接策略不一樣,比如在GCC下,在生成動態庫(–link=shared)時,就不允許進行靜態鏈接到C運行庫(或C++標准庫)。
threading=single|multi
指定創建多線程或單線程的版本庫。
屬性可同時設置,如下兩種方式,為了避免名字沖突,建議采取propery=value的格式:
./bjam variant=debug,release stage
或
./bjam variant=debug variant=release
這兩種方式都可以
最后執行的創建命令:
sudo ./bjam --without-python --layout=tagged variant=debug,release link=static,shared runtime-link=shared threading=multi stage
博客參考: http://blog.csdn.net/lc250123/article/details/52468121 && http://blog.sina.com.cn/s/blog_615770bd01018r2h.html
項目工程需要libboost_iostreams-mt.so 庫,但是由於缺少bzip2和zlib庫而編譯失敗。
解決方案:
1. 首先再在zlib 和 bzip2的源代碼,之后進行交叉編譯,較查編譯選項需要將 -fPIC 添加上,否則生成iostreams庫時候會有問題。
set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -fPIC”)
2. 編譯iostreams庫
sudo ./bjam --with-iostreams -s BZIP2_INCLUDE=/srv/tx2/bzip2-1.0.6/include -s BZIP2_LIBPATH=/srv/tx2/bzip2-1.0.6/lib -s ZLIB_INCLUDE=/srv/tx2/zlib-1.2.11/include -s ZLIB_LIBPATH=/srv/tx2/zlib-1.2.11/lib --layout=tagged variant=debug,release link=static,shared runtime-link=shared threading=multi stage
即可生成對應的libboost_iostreams-mt.so庫

iostreams 原文對對zlib和bzip2的依賴可以參考 https://www.boost.org/doc/libs/1_54_0/libs/iostreams/doc/installation.html
Compile Boost-1.59.0 in Windows Visual Studio 2017
mpi
首先下載微軟的mpi,然后在boost\tools\build\src\tools中找到mpi.jam,修改其中的這三行: 249 line local cluster_pack_path_native = "C:\\Program Files\\Microsoft MPI" ; 251 line if [ GLOB $(cluster_pack_path_native)\\Inc : mpi.h ] 260 line options = <include>$(cluster_pack_path)/Inc 然后打開cmd,進入boost文件夾,運行: bootstrap.bat 運行結束后會生成project-config.jam,打開並在第四行加上:using mpi ;
project-config.jam
import option ; using msvc : 14.1 : "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\cl.exe"; option.set keep-going : false ; using mpi ;
build_vs2017.bat
@ECHO OFF ECHO Building Boost lib, vs2017 b2.exe stage --without-python --toolset=msvc-14.1 link=static link=shared runtime-link=shared threading=multi debug release
x86 Native Tools Command Prompt for VS2017 運行build_vs2017.bat
如下是個庫由於不支持沒有生成
boost_context-vc120-mt-1_59.lib boost_coroutine-vc120-mt-1_59.lib boost_math_c99l-vc120-mt-1_59.lib boost_math_tr1l-vc120-mt-1_59.lib
