• vsomeip 交叉编译


    记录一下vsomeip在PC上编译及交叉编译情况。


    一、下载

    这里使用的是3.1.20.3版本。
    https://github.com/COVESA/vsomeip
    下载:
    git clone https://github.com/COVESA/vsomeip.git

    二、Ubuntu编译

    1、安装依赖包
    (1)生成文档依赖库

    sudo apt-get install asciidoc source-highlight doxygen graphviz

    如果有需要生成说明文档的话才需要安装。

    (2)gtest
    sudo apt-get install libgtest-dev
    cd /usr/src/gtest
    sudo mkdir build 
    cd build
    sudo cmake ..
    sudo make
    sudo cp lib/libgtest*.a /usr/local/lib
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    安装gtest,如果不编译test就不需要安装。

    (3)boost

    需要依赖boost >= 1.55,实际上这个版本的vsomeip只能匹配1.74版本的,编译boost参考:
    https://blog.csdn.net/lang523493505/article/details/126240805

    (4)cmake

    我这里使用的是cmake-3.24.0版本,版本太低了可能会有异常。

    (5)gcc

    gcc的版本要大于4.8。

    2、编译及安装

    这里打算将编译出来的库放在上级目录下的target_pc目录。
    在克隆下来的工程根目录创建文件夹build_dir,并且在里面创建编译脚本。
    build.sh:

    #!/bin/sh
    
    #编译工具
    COMPILER_CC=gcc
    COMPILER_CXX=g++
    
    #编译选项
    COMPILER_FLAGS="-lpthread"
    
    #安装位置
    COMPILER_PREFIX=$(pwd)/../../target_pc
    
    #boost编译后的安装位置
    BOOST_ROOT=$(pwd)/../../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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在脚本里面制定了编译安装的指定目录,所使用的gcc、g++,编译选项,boost库的目录。
    -DENABLE_SIGNAL_HANDLING=1 是为了能够随时终止应用并能够将共享内存段 /dev/shm/vsomeip 进行正确删除。

    执行。

    3、编译结果

    会生成默认配置文件、头文件、动态库、静态库。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    三、交叉编译

    1、安装依赖包

    交叉编译主要的点在于要配置交叉编译工具(gcc)以及指定编译平台的依赖库(sysroot)。
    还有很重要的是要提前交叉编译好Boost库。
    参考:https://blog.csdn.net/lang523493505/article/details/126240805

    2、编译及安装

    这里打算将编译出来的库放在上级目录下的target_cross目录。
    在克隆下来的工程根目录创建文件夹build_dir,并且在里面创建编译脚本。
    build.sh:

    #!/bin/sh
    
    #编译工具路径
    QL_CROSSTOOLS=/opt/ql_crosstools/ql-ag550qcn-le20-gcc820-v1-toolchain/gcc/usr/bin/arm-oe-linux-gnueabi
    
    #SYSROOT路径
    QL_SYSROOT=/home/hrx/work/ql-sysroots
    COMPILER_SYSROOT="--sysroot=$QL_SYSROOT"
    
    #编译工具
    COMPILER_CC=$QL_CROSSTOOLS/arm-oe-linux-gnueabi-gcc
    COMPILER_CXX=$QL_CROSSTOOLS/arm-oe-linux-gnueabi-g++
    #编译选项
    COMPILER_FLAGS="-lpthread -march=armv7-a -marm -mfpu=neon -mfloat-abi=hard"
    
    #安装位置
    COMPILER_PREFIX=$(pwd)/../../target_cross
    
    #boost编译后的安装位置
    BOOST_ROOT=$(pwd)/../../target_cross
    
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    3、编译结果

    会生成默认配置文件、头文件、动态库、静态库。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【Vue】使用 axios 发送ajax 请求
    HTML+CSS+JavaScript 大学生网页设计制作作业实例代码 200套静态响应式前端网页模板(全网最全,建议收藏)
    java使用反射获取泛型运行时的类
    macOS Ventura 正式版你确定不更新,好用到爆的功能你不想尝试一下?
    Android入门第28天-ListView嵌套CheckBox在滚动时失去选中状态的问题
    python程序打包(Mac/Window)
    ORACLE克隆用户权限:DBMS_METADATA.GET_GRANTED_DDL
    系数( coefficients)、因数或因子( factors)
    创建对象在堆区如何分配内存
    arm-linux实现onvif server+WS-UsernameToken令牌验证
  • 原文地址:https://blog.csdn.net/lang523493505/article/details/126413912