vsomip跨平台编译

1.下载源码

vsomeip是宝马开源的基于TCP UDP协议的"中间件"通信。之所以说它为“中间件”,是因为简单来说它就是一个封装库,实现远程RPC通信的部件

尤其在现在汽车行业SOA架构下使用得比较多,废话不多说,首先下载源码和相关依赖库

1.1 vsomeip源码:https://github.com/COVESA/vsomeip

1.2 vsomeip里面实现很多依赖boost库,所以需要安装boost:下载地址:https://www.boost.org/users/download/

2.源码编译

2.1 首先进行boost库编译

因为要进行交叉编译,所以,在本地编译能够在ubuntu上运行的库,建立一个boost_lib文件目录里面保存ubuntu 上运行的target_pc目录和后续arm上运行的target_arm目录

vsomeip编译运行_交叉编译

进入源码根目录:建立编译脚本build_boost.sh(编译ubuntu用)和build_arm_boot.sh(arm 上使用)

vsomeip编译运行_交叉编译_02

脚本内容

build_boost.sh

#!/bin/sh

COMPILER_PREFIX=$(pwd)/../boost_lib/target_pc #需要安装的库路径,这里是上述说到的ubuntu运行的路径

rm -rf project-config.jam*
./bootstrap.sh --with-libraries=all --prefix=$COMPILER_PREFIX
./b2 install

然后执行脚本,等待编译安装结束,根据电脑配置,稍微需要点时间,等待就行

build_arm_boost.sh内容

#!/bin/sh

#编译工具路径
QL_CROSSTOOLS=xxx/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin #修改成自己的交叉编译工具链路径

#SYSROOT路径
QL_SYSROOTS=xxx/buildroot/output/rockchip_rv1126_rv1109/host/arm-buildroot-linux-gnueabihf/sysroot/
COMPILER_SYSROOT="--sysroot=$QL_SYSROOTS"

#编译工具
COMPILER_CC=$QL_CROSSTOOLS/arm-linux-gnueabihf-gcc

#编译选项
COMPILER_FLAGS="-march=armv7-a -marm -mfpu=neon -mfloat-abi=hard"

#安装位置
COMPILER_PREFIX=$(pwd)/../boost_lib/target_arm


rm -rf project-config.jam*
./bootstrap.sh --with-libraries=all --prefix=$COMPILER_PREFIX

#将gcc替换成交叉编译工具的gcc并添加编译选项和sysroot路径
sed -i "/using gcc/c using gcc : : $COMPILER_CC $COMPILER_FLAGS $COMPILER_SYSROOT ;" project-config.jam
./b2 install variant=release abi=aapcs address-model=32 architecture=arm binary-format=elf threading=multi toolset=gcc

执行自己需要的平台编译脚本,boost库编译结果如下

vsomeip编译运行_交叉编译_03

vsomeip编译运行_boost库_04

现在boost库成功编译安装了,解下来正式进入vsomeip源码编译安装,我这里是用的vsomeip-3.1.20.1版本(为什么说版本,是因为不同的vsomeip编译,可能依赖的boost库版本不一致,会编译出错,亲身经历。所以这里我使用的是vsomeip-3.1.20.1,boost是1.74)在源码目录下创建build_pc(ubuntu使用得版本),并在build_pc目录下创建编译脚本build.sh,内容如下,本人不喜欢将库默认都安装在系统目录下所以,这里选择安装在vsomeip-lib/target_pc(ubuntu上使用得版本)

vsomeip编译运行_linux_05

#!/bin/sh

#编译工具
COMPILER_CC=gcc
COMPILER_CXX=g++

#编译选项
COMPILER_FLAGS="-lpthread"

#安装位置
COMPILER_PREFIX=$(pwd)/../../vsomeip-lib/target_pc
#boost编译后的安装位置
BOOST_ROOT=/home/book/work/boost/boost_lib/target_pc

cmake -DCMAKE_INSTALL_PREFIX=$COMPILER_PREFIX \
      -DCMAKE_C_COMPILER=$COMPILER_CC \
      -DCMAKE_CXX_COMPILER=$COMPILER_CXX \
      -DCMAKE_C_FLAGS="$COMPILER_FLAGS" \
      -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS" \
      -DBOOST_ROOT=$BOOST_ROOT \
      -DBoost_INCLUDE_DIR=$BOOST_ROOT/include/boost \
      -DBoost_LIBRARY_DIR=$BOOST_ROOT/lib \
      -DENABLE_SIGNAL_HANDLING=1 \
      -DIAGNOSIS_ADDRESS=0x10 \
      -DENABLE_SESSION_HANDLING_CONFIG=1 \
      ..

make
make install

一样的在vsomeip源码目录下创建build_arm目录,在build_arm目录下创建交叉编译脚本build_arm.sh,内容如下

vsomeip编译运行_交叉编译_06

#!/bin/sh

#编译工具路径
QL_CROSSTOOLS=xxx/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin #修改成自己的交叉编译工具路径

#SYSROOT路径
QL_SYSROOT=xxx/buildroot/output/rockchip_rv1126_rv1109/host/arm-buildroot-linux-gnueabihf/sysroot/  #修改成自己的交叉编译工具路径
COMPILER_SYSROOT="--sysroot=$QL_SYSROOT"

#编译工具
COMPILER_CC=$QL_CROSSTOOLS/arm-linux-gnueabihf-gcc
COMPILER_CXX=$QL_CROSSTOOLS/aarm-linux-gnueabihf-g++
#编译选项
COMPILER_FLAGS="-lpthread -march=armv7-a -marm -mfpu=neon -mfloat-abi=hard"

#安装位置
COMPILER_PREFIX=$(pwd)/../../vsomeip-lib/target_arm/

#boost编译后的安装位置
BOOST_ROOT=$(pwd)/../../../boost/boost_lib/target_arm/

cmake -DCMAKE_SYSTEM_NAME=Linux \
      -DCMAKE_INSTALL_PREFIX=$COMPILER_PREFIX \
      -DCMAKE_C_COMPILER=$COMPILER_CC \
      -DCMAKE_CXX_COMPILER=$COMPILER_CXX \
      -DCMAKE_C_FLAGS="$COMPILER_FLAGS $COMPILER_SYSROOT" \
      -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS $COMPILER_SYSROOT" \
      -DCMAKE_FIND_ROOT_PATH=$QL_SYSROOT \
      -DBOOST_ROOT=$BOOST_ROOT \
      -DBoost_INCLUDE_DIR=$BOOST_ROOT/include/boost \
      -DBoost_LIBRARY_DIR=$BOOST_ROOT/lib \
      -DENABLE_SIGNAL_HANDLING=1 \
      -DIAGNOSIS_ADDRESS=0x10 \
      -DENABLE_SESSION_HANDLING_CONFIG=1 \
      ..

make
make install

然后根据自己的平台进入对应的目录执行相关的脚本即可

vsomeip编译运行_linux_07

4.验证

可以根据我之前的文章,https://blog.csdn.net/weixin_44723188/article/details/130118930?spm=1001.2014.3001.5502进行编译demo程序跑起来

vsomeip编译运行_boost库_08

5.问题

在编译过程中,遇到很多问题其中最典型的就是libvsomeip-cfg.so加载不成功,后续会专门说一下相关问题

vsomeip编译运行_交叉编译_09