ubuntu 上交叉编译 linaro 的库

交叉编译是在一个平台上编译另外一个平台可用的应用程序,此时可以想象,另外一个平台上的系统库不同,所以我们要指定编译时使用的系统库。另外一个平台上运行环境不同,内存的大小端等,所以我们要使用单独编译工具。
即分别设置 SYSROOT 和 C_COMPILER / CXX_COMPILER

编译linaro环境下的三方库

这里介绍使用交叉编译的方式,编译三方库的过程。

一般流程

正常地,我们为cmake设置好要用的工具链,系统环境,以及编译输出的库路径,直接cd build && cmake .. && make install即可。

  1. 创建一个 aarch64.toolchain.cmake 文件,并写入如下内容。(路径按实际情况修改)
cmake_minimum_required(VERSION 2.8.0)

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(TOOLCHAIN_DIR /usr/local/arm/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu)
set(CMAKE_SYSROOT  /usr/local/arm/sysroot)
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
  1. 创建一个build.sh,并写入如下内容。
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64.toolchain.cmake -DCMAKE_INSTALL_PREFIX=../opt ..
make install
  1. 查看输出结果

tree opt,正常应该可以看到你想要的目录树结构。

确认后,就可以将opt目录直接拷贝走,拿去使用了。

当然,还有一些三方库是没有这么容易编译的。

部分三方库编译
opencv 编译

原本按照上面的一般流程,opencv是可能编译失败的,或者说这里首先要清晰我们的目标。

可能失败的原因是,opencv有些模块依赖很多其他的库,而我们提供的 $CMAKE_SYSROOT目录下如果找不到这些库,就会导致编译失败。

但是,我们的目标可能只是使用opencv的核心库,如opencv_video这样的库,我们是不打算使用的。所以直接忽略他,不进行编译即可。

  1. 同一般方法的1 2步骤,发现最后一步 make install发生错误,即缺少一部分库,阻止了编译的继续。
  2. 调整编译选项,只保留主要的核心库。
ccmake build

保留图示几项,其中opencv_world是把要生成的so打包成一个。

按回车是修改,修改完成后,按 c 是生成配置。

完成之后,即可再进入build目录 make install

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值