• bctoolbox 交叉编译


    记录一下 bctoolbox 在PC上编译及交叉编译情况,这个是编译 ortp 的依赖库。


    一、下载

    这里使用的是 release 5.1 版本。
    https://github.com/BelledonneCommunications/bctoolbox
    下载:
    git clone https://github.com/BelledonneCommunications/bctoolbox.git
    切换一下分支:
    git checkout release/5.1

    二、Ubuntu编译

    1、安装依赖包
    (1)mbedtls 库

    由于编译依赖于 mbedtls 库,所以再此之前要先编译安装mbedtls。
    经验证 mbedtls-2.7 版本可适配。
    参考:mbedtls 交叉编译

    如果缺少这个依赖包会出现如下错误:

    CMake Error at /usr/local/share/cmake-3.24/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
      Could NOT find PolarSSL (missing: POLARSSL_INCLUDE_DIRS POLARSSL_LIBRARIES
      HAVE_POLARSSL_SSL_H)
    Call Stack (most recent call first):
      /usr/local/share/cmake-3.24/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
      cmake/FindPolarSSL.cmake:58 (find_package_handle_standard_args)
      CMakeLists.txt:93 (find_package)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    (2)BcUnit 库

    由于编译依赖于 BcUnit 库,所以再此之前要先编译安装BcUnit。
    经验证 release 5.1 版本可适配。
    参考:BcUnit 交叉编译

    如果缺少这个依赖包会出现如下错误:

    CMake Error at CMakeLists.txt:122 (find_package):
      Could not find a package configuration file provided by "BcUnit" with any
      of the following names:
    
        BcUnitConfig.cmake
        bcunit-config.cmake
    
      Add the installation prefix of "BcUnit" to CMAKE_PREFIX_PATH or set
      "BcUnit_DIR" to a directory containing one of the above files.  If "BcUnit"
      provides a separate development package or SDK, be sure it has been
      installed.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    2、编译及安装

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

    #!/bin/sh
    
    #编译工具
    COMPILER_CC=gcc
    COMPILER_CXX=g++
    
    #安装位置
    COMPILER_PREFIX=$(pwd)/../../target_pc
    
    #依赖库位置
    COMPILER_LIB=$(pwd)/../../target_pc
    
    cmake -DCMAKE_INSTALL_PREFIX=$COMPILER_PREFIX \
          -DCMAKE_C_COMPILER=$COMPILER_CC \
          -DCMAKE_CXX_COMPILER=$COMPILER_CXX \
          -DCMAKE_PREFIX_PATH="$COMPILER_LIB" \
          -DENABLE_TESTS_COMPONENT=ON \
          -DENABLE_DECAF=NO \
          ..
    
    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

    在脚本里面制定了编译安装的指定目录,所使用的gcc、g++

    执行。

    3、编译结果

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

    三、交叉编译

    1、安装依赖包

    交叉编译主要的点在于要配置交叉编译工具(gccg++)以及指定编译平台的依赖库(sysroot)。
    还有指定已经交叉编译好的 mbedtlsBcUnit 的库。

    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_CC=$QL_CROSSTOOLS/arm-oe-linux-gnueabi-gcc
    COMPILER_CXX=$QL_CROSSTOOLS/arm-oe-linux-gnueabi-g++
    #编译选项
    COMPILER_FLAGS="-march=armv7-a -marm -mfpu=neon -mfloat-abi=hard"
    
    #安装位置
    COMPILER_PREFIX=$(pwd)/../../target_cross
    
    #依赖库位置
    COMPILER_LIB=$(pwd)/../../target_cross
    
    cmake -DCMAKE_SYSTEM_NAME=Linux \
          -DCMAKE_INSTALL_PREFIX=$COMPILER_PREFIX \
          -DCMAKE_C_COMPILER=$COMPILER_CC \
          -DCMAKE_C_FLAGS="$COMPILER_FLAGS" \
          -DCMAKE_CXX_COMPILER=$COMPILER_CXX \
          -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS" \
          -DCMAKE_SYSROOT=$QL_SYSROOT \
          -DCMAKE_PREFIX_PATH="$COMPILER_LIB" \
          -DENABLE_TESTS_COMPONENT=ON \
          -DENABLE_DECAF=NO \
          ..
    
    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

    在脚本里面制定了编译安装的指定目录,所使用的gcc、g++

    执行。

    3、编译结果

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


    广告插入:
    下面是一个领外卖券、打车券的公众号,如果恰有需要可以关注一下。

  • 相关阅读:
    Java 设计模式之桥接模式
    1-10嵌入式Linux系统开发与应用|嵌入式Linux|第三章 Linux编程环境
    智能座舱架构与芯片- (9) 音频篇 上
    ROS2自定义接口Python实现机器人移动
    Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本详解
    java爬虫破解滑块验证码
    组合数学总结
    phpstudy_pro高效率建一个属于自己的网站
    Spring MVC(中)
    Spring Boot 注解
  • 原文地址:https://blog.csdn.net/lang523493505/article/details/126725877