• Boost Arm 交叉编译


    Boost Arm 交叉编译

    1. 源码下载

    下载地址:https://sourceforge.net/projects/boost/files/boost/
    这里下载 1.74.0 版本
    在这里插入图片描述
    然后解压。

    2. 配置

    有些库我们是不需要的,所以就不需要编译,可以通过 -show-libraries 查看库列表

    vincent@msi-creator-15:~/Temp/arm/boost_1_74_0$ 
    ---➤ ./bootstrap.sh --show-libraries
    Building Boost.Build engine with toolset gcc... tools/build/src/engine/b2
    
    The following Boost libraries have portions that require a separate build
    and installation step. Any library not listed here can be used by including
    the headers only.
    
    The Boost libraries requiring separate building and installation are:
        - atomic
        - chrono
        - container
        - context
        - contract
        - coroutine
        - date_time
        - exception
        - fiber
        - filesystem
        - graph
        - graph_parallel
        - headers
        - iostreams
        - locale
        - log
        - math
        - mpi
        - nowide
        - program_options
        - python
        - random
        - regex
        - serialization
        - stacktrace
        - system
        - test
        - thread
        - timer
        - type_erasure
        - wave
    
    • 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
    • 39
    • 40

    通过 -without-libraries=, , , 逗号隔开去掉不想编译的库,并指定安装位置:

    ./bootstrap.sh --without-libraries=atomic,chrono --prifix=./install
    
    • 1

    这里还是全部编译了,所以直接执行下面命令

    ./bootstrap.sh --prefix=./install
    
    • 1

    执行后结果

    vincent@msi-creator-15:~/Temp/arm/boost_1_74_0$ 
    ---➤ ./bootstrap.sh --prefix=./install
    Building Boost.Build engine with toolset gcc... tools/build/src/engine/b2
    Detecting Python version... 3.9
    Detecting Python root... /home/vincent/anaconda3
    Unicode/ICU support for Boost.Regex?... /usr
    Generating Boost.Build configuration in project-config.jam for gcc...
    
    Bootstrapping is done. To build, run:
    
        ./b2
        
    To generate header files, run:
    
        ./b2 headers
    
    To adjust configuration, edit 'project-config.jam'.
    Further information:
    
       - Command line help:
         ./b2 --help
         
       - Getting started guide: 
         http://www.boost.org/more/getting_started/unix-variants.html
         
       - Boost.Build documentation:
         http://www.boost.org/build/
    
    • 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

    3. 修改配置

    上一步将会生成主要的2个文件:

    1. b2
    2. project-config.jam

    3.1 修改编译器

    打开 project-config.jam 文件修改内的编译器
    在这里插入图片描述
    将此句修改为交叉编译器路径

    using gcc : : /xxx/gcc-arm-11.2-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc ;
    
    • 1

    这里语法很苛刻,需要注意下面图内标注的地方都是需要有空格的。
    在这里插入图片描述

    3.2 修改安装目录

    在这里插入图片描述
    这里同样要注意空格。

    3.3 其他配置

    1. 选项

      • build-type 构建类型,默认是 minimal ,此外还有 complete 选项。minimal 在Linux下只编译 release版本的多线程静态库和动态库。而 complete 在 unix/linux 下将会编译多个版本,即 debug 或 release,多线程或单线程,静态库或动态库。一般不建议全部编译,费时还费空间,提倡按需编译。

      • build-dir 构建目录,不指定将会在源码目录构建。

      • layout 确定是否选择库名和头文件位置,以便Boost的多个版本或多个编译器可以在同一个系统上使用。有以下3个选项配置。

        • versioned 二进制文件的名称包含版本号、编译器名称和版本以及编码的构建属性。头文件将会安装在 HDRDIR 的子目录中,其名称包含boost的版本号。
        • tagged 二进制文件的名称包含编码的构建属性,但不包含编译器名称和版本或boost版本。如果使用同一个编译器构建多个boost,推荐使用。
        • system 二进制文件名称不包含boost版本号或编译器的名称和版本号,boost头文件直接安装到 HDRDIR 目录中。

        windows 默认是选择 versioned,unix默认选择system。当 build-type 为 complete时,variant=debug,release属性时,必须要确保 layout=versioned或tagged。

      • without 设置排除编译的库。

    2. 属性

      • variant = debug|release,编译库的模式,支持同时编译。

      • link = static|shared,编译静态库还是动态库。

      • runtime-link =static|shared,指创建的库是静态链接还是动态链接到C运行库(或C++标准库),这个属性需要依据 link 的类型,不同的编译器允许的链接策略不一样,比如在 GCC 下,在生成动态库(-link=shared)时,就不允许进行静态链接到C运行库(或C++标准库)

        这里重点强调一下,当link为static时,runtime-link可以是shared,boost本身依赖的C/C++底层库就是动态链接的,但是对于boost而言是静态链接,好比A程序依赖boost,A与boost是静态链接,但是boost与C/C++运行库是动态的。

      • threading = single|multi,创建多线程还是单线程的版本。

      属性是支持同时设置的,比如:

      variant=debug,release
      # 或
      variant=debug variant=release
      
      • 1
      • 2
      • 3

    配置的命令示例如下:

    ./b2 --layout=tagged
         -sHAVE_ICU=1
         variant=debug,release 
         link=static 
         runtime-link=shared 
         threading=multi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    sHAVE_ICU=1 代表支持 Unicode/ICU。

    4. 编译

    执行下面命令开始编译

    ./b2
    
    • 1

    编译成功后如下提示:
    在这里插入图片描述

    5. 安装

    编程完成的静态或动态库文件就在stage目录中。

    vincent@msi-creator-15:~/Temp/arm/boost_1_74_0$ 
    ---➤ tree -L 1 stage
    stage
    └── lib
    
    • 1
    • 2
    • 3
    • 4

    但是缺少头文件,执行下面的命令进行安装,头文件和库将会拷贝到源码目录下的 install 目录中。

    ./b2 install
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    从零开始学习 Java:简单易懂的入门指南之泛型及set集合(二十二)
    MSYS2 使用
    任务管理器的正确使用教程
    【34】cobra 框架
    Java 【异常】
    机器学习-04-分类算法-01决策树
    数据结构 专项练习
    SpringBoot中个常见的几个问题
    工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息
    ubuntu18.04双系统安装(2023最新最详细)以及解决重启后发现进不了Ubuntu问题
  • 原文地址:https://blog.csdn.net/wf19930209/article/details/125533211