zoukankan      html  css  js  c++  java
  • Boost 源代码交叉编译

    环境

    操作系统:Ubuntu 16.04

     编译工具:gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu

    boost源码

    地址:https://sourceforge.net/projects/boost/files/boost/

    编译

    1. 解压,cd 到目录
    tar -zxvf boost_1_61_0.tar.gz 

    --show-libraries可查看所有库

     --without-libraries=, , , 逗号隔开去掉不想编译的库,--prefix=/../ 指定编译后的安装路径

    cd boost_1_61_0
    ./bootstrap.sh --prifix=./install

    生成有 b2 和 bjam ,以及一个 project-config.jam 的文件,修改该文件的一行(指定自己的编译器):

    using gcc : : /home/ke/softwares/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc ;

    注意:这中间是有空格的,如下图标示的地方:

    特别是最后一个分号前是有空格的,要不然会出错。

      2.执行 ./bjam 即可,这是编译,创建的 lib 文件默认在 stage 文件夹

      3. 编译完后,执行 ./bjam install 即进行安装,我的上面 --prefix=/.../ 指定的目录就是安装目录

    ./bjam –help

    常用选项(Options)和属性(Properties)的说明,一般带有–前缀的关键词为option,没有的则为property。

    属性

    --show-libraries

    显示需要编译才能使用的库列表

    –-build-type=minimal|complete

    --build-type=minimal为默认值,此时在Linux下只编译生成release版的动态链接C运行库(C++标准库)的多线程静态库和动态库
    –build-type=complete,在Unix/linux下要编译多个变体(debug或release,多线程或单线程,静态库或动态库,静态链接或动态链接C运行库/C++标准库)。不建议全部编译,费时还费空间,提倡按需编译。

    --layout=versioned|tagged|system

    决定需要编译的库名及头文件的地址目录名的生成策略。默认Windows下--layout=versioned,Linux下–layout=system。
    当同时编译多个版本时,最好设置–layout=versioned或–layout=tagged,否则编译多半会失败,原因是有的版本同时编译若不指定命名策略,可能在输出到指定目录的时候造成命名冲突。

    注:–build-type=complete时,不需要设置此属性。但指定variant=debug,release等属性时,须确保–layout=versioned或–layout=tagged。

    --build-dir=DIR

    指定存放编译过程中生成的中间文件,目标文件等其他文件的目录,默认在./bin.v2。

    --with-libraries

    创建和安装指定的库

    --without-libraries

    不对指定的库进行创建和安装,默认创建所有的库

    安装:关键词 install 或 stage

    ./bjam install

    install会安装头文件和库文件到相应指定目录,头文件安装到/usr/local/include下,库文件安装到/usr/local/lib下。具体指定安装目录见./bjam –help。

    ./bjam stage

    stage生成的库文件到一个目录下,通常默认就在./stage下。

    注:install 和 stage 貌似不能同时使用,中间会卡住。若编译过程中未指定install或stage,则生成的目标库文件只存在于–build-dir所指的目录中,默认为./bin.v2。考虑到此,若无需将头文件和库文件安装,则推荐使用stage关键字。

    属性

    toolset=toolset

    指定编译器,默认自动检测,安装了多个编译器的时候可以使用此属性。

    variant=debug|release

    指定编译debug或release版本。

    link=static|shared

    指定创建静态库或动态库

    runtime-link=static|shared

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

    threading=single|multi

    指定创建多线程或单线程的版本库。

    属性可同时设置,如下两种方式,为了避免名字冲突,建议采取propery=value的格式:

    ./bjam variant=debug,release stage

    ./bjam variant=debug variant=release

    这两种方式都可以

    最后执行的创建命令:

    sudo ./bjam --without-python --layout=tagged variant=debug,release link=static,shared runtime-link=shared threading=multi stage

    博客参考: http://blog.csdn.net/lc250123/article/details/52468121 && http://blog.sina.com.cn/s/blog_615770bd01018r2h.html

    项目工程需要libboost_iostreams-mt.so 库,但是由于缺少bzip2和zlib库而编译失败。

    解决方案:

    1. 首先再在zlib 和 bzip2的源代码,之后进行交叉编译,较查编译选项需要将 -fPIC 添加上,否则生成iostreams库时候会有问题。

    set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -fPIC”)

    2. 编译iostreams库

    sudo ./bjam --with-iostreams -s BZIP2_INCLUDE=/srv/tx2/bzip2-1.0.6/include -s BZIP2_LIBPATH=/srv/tx2/bzip2-1.0.6/lib -s ZLIB_INCLUDE=/srv/tx2/zlib-1.2.11/include -s ZLIB_LIBPATH=/srv/tx2/zlib-1.2.11/lib --layout=tagged variant=debug,release link=static,shared runtime-link=shared threading=multi stage

    即可生成对应的libboost_iostreams-mt.so库

     iostreams 原文对对zlib和bzip2的依赖可以参考 https://www.boost.org/doc/libs/1_54_0/libs/iostreams/doc/installation.html

  • 相关阅读:
    个人图床【Gitee+PicGo(+Typora)】
    java 对象序列化
    @RequestParam和@PathVariable
    restful架构
    数组跟切片的区别
    为什么java支持 一个类实现多个接口;但是只能继承一个类
    == 与equals区别
    static代码块是先加载的,不能用成员变量。可以new。
    @Configuration和 @Bean
    Thymeleaf 常用th标签基础整理
  • 原文地址:https://www.cnblogs.com/flyinggod/p/12871298.html
Copyright © 2011-2022 走看看