[关闭]
@aod321 2019-01-06T18:45:22.000000Z 字数 1428 阅读 629

Boost交叉编译移植ARM技术文档

C++ arm 交叉编译 激光雷达SDK


注意

本文采用g++-arm-linux-gnueabihf编译器来编译boost库,ML16的SDK,还有使用SDK的实例程序.理论上来说交叉编译后的实例程序可以在arm板上直接运行,并且也在QEMU模拟器测试通过,但客户拿到实际的arm板仍有无法运行的可能性

arm处理器每个核使用不同的arm体系结构版本,每个版本的对应指令集也不同,具体如下所示:
Screenshot from 2019-01-07 02-23-45.png

arm-linux-gcc编译器交叉编译时可以通过在CFLAGS中加入-march选项来选择编译出的汇编指令是针对arm处理器的哪个体系结构。如:ARM7TDMI处理器加入-march=armv4t表示支持V4T的指令集,从而解决了没有加入-march选项时编译器将半字或字的strh和str操作自动编译成了2个strb或4个strb指令,另外使用armv4t替代armv4则解决了armv4对bx指令不支持的错误。

关于如何更换工具链的方法,将会附在本文最后.

交叉编译boost库

1.安装arm交叉编译工具链

  1. sudo apt-get install gcc-arm-linux-gnueabihf
  2. sudo apt-get install g++-arm-linux-gnueabihf

安装完成之后,直接在终端中键入
arm-linux-guneabi-gcc -v
可以看到具体的版本信息。

2.下载boost源码

  1. wget https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.gz

3.解压

  1. tar -xvf boost_1_69_0.tar.gz

4.交叉编译boost库

4.1进入目录

  1. cd boost_1_69_0/

4.2 编译选项配置

仅编译SDK需要的thread部分

  1. ./bootstrap.sh --with-libraries=thread

执行完后会生成b2、bjam和project-config.jam文件

4.3 修改工具链

修改project-config.jam,找到using gcc这一行(第12行)并参照如下修改

  1. using gcc : arm : arm-linux-gnueabihf-g++ ; (请务必注意空格)

4.4 运行bjam

  1. ./bjam

4.5 开始编译

  1. ./b2

4.7 安装

  1. sudo ./b2 install --prefix=/opt/boost

完成后编译后的文件会安装到当前系统的opt/boost目录下,如果不修改前缀的话,就会讲arm架构的库直接装在本机架构的/usr/lib和/usr/include造成冲突.

交叉编译SDK,DEMO并移植到ARM

请查看ML16 SDK 交叉编译与移植使用手册

修改交叉编译工具链的方法

如果安装的工具链有问题或者需要移植到其他平台下,则需要更换其他工具链.
更改工具链的方法很简单,SDK和DEMO只需要修改arm-linux-toolChain.cmake这两行即可.

  1. SET(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc)
  2. SET(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++)

boost的话同理,将project-config.jam的arm-linux-gnueabi-g++改掉就好
注意:更换的工具链请同样放到/usr/bin目录

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注