boost库安装及其交叉编译库生成
文章目录
前言
本文介绍boost安装及不同平台架构运行的boost库编译。
一、boost是什么?
boost库是一个功能强大,构造精巧,跨平台的免费的C++开源库。它使得C++编程更优雅、更有活力、更高产,C++11的标准有三分之二来自boost库。在boost1.57版本时,就一共包含了129个组件,分为25个大类,涵盖了文本处理,容器,迭代器,算法,图像处理,模板元编程,并发编程等许多领域。
二、安装编译步骤
1.下载库
从boost官网下载对应版本并解压,本文以boost_1.81.0为例:
官方安装参考。
2.Install Boost.Build
安装b2
cd boost_1_81_0
cd tools/build
./bootstrap.sh
./b2 install prefix=../../b2_install
.bashrc或.zshrc中添加环境变量,Add b2_install/bin to your PATH environment variable
export PATH=/home/mini/data3/boost_1_81_0/b2_install/bin:$PATH
3.配置交叉编译环境,编辑user-config.jam如下
返回boost_1_81_0目录。
using gcc指定编译工具,设定不同交叉编译工具链即可编译相应目标板运行boost库。更多交叉编译官方参考B2 User Manual:
using gcc : 4.9 : g++-4.9 : ; # 编译Ubuntu Trusty下运行库,前提是PC上已安装gcc4.9
using gcc : 7 : g++-7 : ; # 编译Ubuntu Bionic下运行库,前提是PC上已安装gcc7
using gcc : 9 : g++-9 : ; # 编译Ubuntu Focal下运行库,前提是PC上已安装gcc9
using gcc : tda4 : /home/mini/data3/lane_repo/tda4_rtos_sdk/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++ : ; # 编译armv8架构,Linux系统运行库
using gcc : mdc : /usr/local/mdc_sdk/dp_gea/mdc_cross_compiler/bin/aarch64-target-linux-gnu-g++ : ; # 编译armv8架构,Linux系统运行库
using gcc : cv22 : /home/mini/data3/amba/c1-sw-sdk/usr/bin/aarch64-linux-gnu-g++ : ; # 编译armv8架构,Linux系统运行库
using gcc : j3 : /home/mini/data3/j3_release/sdk_app/gcc-linaro-6.5.0-2018.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ : ; # 编译armv8架构,Linux系统运行库
4.写个简单的编译脚本方便编译以上各平台环境的boost运行库,编辑mk_conan_release.sh如下:
#!/bin/bash
RED_COLOR='\E[1;31m' #红
GREEN_COLOR='\E[1;32m' #绿
YELOW_COLOR='\E[1;33m' #黄
BLUE_COLOR='\E[1;34m' #蓝
RES='\E[0m'
platform=$1
cur_path=`pwd`
#echo ${cur_path}
arr=(${cur_path })
#echo ${arr[@]}
Repo_module=${arr[-1]}
echo -e "${RED_COLOR}<================== platform = ${platform} =====================>${RES}"
echo -e "${GREEN_COLOR}<================== module name = $Repo_module =====================>${RES}"
gcc_path=""
prj_path=/home/mini/data3
install_dir=${prj_path}/conan_dnp/pack_from_prebuild
install_prefix=${install_dir}/${Repo_module}/binaries/${platform}
echo -e "${BLUE_COLOR}<================== install_prefix = ${install_prefix} =====================>${RES}"
# 配置gcc
if [ $platform = "linux" ]; then
b2 -j8 toolset=gcc-4.9 --user-config=./user-config.jam --build-dir=${platform}_build --prefix=${install_prefix} install
elif [ $platform = "linux_focal" ]; then
b2 -j8 toolset=gcc-9 --user-config=./user-config.jam --build-dir=${platform}_build --prefix=${install_prefix} install
elif [ $platform = "cv22" ]; then
b2 -j8 toolset=gcc-cv22 --user-config=./user-config.jam --build-dir=${platform}_build --prefix=${install_prefix} address-model=64 architecture=arm target-os=linux abi=aapcs install
elif [ $platform = "tda4" ]; then
b2 -j8 toolset=gcc-tda4 --user-config=./user-config.jam --build-dir=${platform}_build --prefix=${install_prefix} address-model=64 architecture=arm target-os=linux abi=aapcs install
elif [ $platform = "mdc" ]; then
b2 -j8 toolset=gcc-mdc --user-config=./user-config.jam --build-dir=${platform}_build --prefix=${install_prefix} address-model=64 architecture=arm target-os=linux abi=aapcs install
elif [ $platform = "j3" ]; then
b2 -j8 toolset=gcc-j3 --user-config=./user-config.jam --build-dir=${platform}_build --prefix=${install_prefix} address-model=64 architecture=arm target-os=linux abi=aapcs install
else
echo "Error : Unsupport Platform :"${platform}
exit 0
fi
5.编译示例
./mk_conan_release.sh linux
./mk_conan_release.sh linux_focal
./mk_conan_release.sh cv22
./mk_conan_release.sh tda4
./mk_conan_release.sh mdc
总结
以上就是最近boost交叉编译工作的总结。鉴于网上各种文章,均未找到完全详尽指导交叉编译过程,特此记录,也希望给诸君有益参考。