交叉编译小结

前言

交叉编译一般是利用虚拟机将三方源码进行编译成目标机想要的可执行程序或者库文件。这个过程一般需要目标机的交叉编译环境,编译环境被称之为编译工具链。这是一种非常常用的方式,特别是对于现有的开源库的使用,可以提高整体的开发效率和提高代码的复用,并且能有较高的代码质量和产品稳定性,因为开源项目一般是是一群优秀的人合作完成的作品。

1 环境准备

首先需要安装编译工具链,这部分一般由第三方芯片厂家提供,这些程序最终将在他们的芯片上运行。将交叉编译工具链解压到/opt/目录下,其它目录也行但是需要加入到环境变量中。操作一般比较简单,我这边举个栗子:

#1 拷贝到opt目录下
/opt/arm-himix200-linux
#2 添加path环境
vi /etc/profile
export PATH=$PATH:/opt/arm-himix200-linux
source /etc/profile

2 交叉编译

2.1 源码获取

三方库的最多的获取方式就是来源于github,一种方式是直接web端进入gitbub进行源码下载:

#例如下载FFmpeg
https://github.com/FFmpeg/FFmpeg
#第二是进行版本选择,一般选择最新版本,有时候为了兼容旧版本,或者编译器限制,需要选择特定版本
#具体是到release分支目录下下载对应的源码
https://github.com/FFmpeg/FFmpeg/releases
在这里插入图片描述

第二种方式直接利用命令行git直接下载:

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

有时候情况会更复杂一些,需要自己手动安装源:

sudo add-apt-repository ‘deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse’

2.2 交叉编译编译

#解压
tar -xvf ffmpeg-3.0.tar.gz
cd ffmpeg-3.0
#这时候就可以开始编译库了

2.3 三方库交叉编译两种方式:

2.3.1 configure

基础配置:
一种是利用configure进行编译,这种方式比较简单一般没太大要求默认配置的情况下是配置两个:一个是:–host用于指定交叉编译器;另一个是安装路径:–prefix用于指定安装目录。

#指定交叉编译器和指定安装路径
./configure --host=arm-himix200-linux --prefix=$HOME/my_project/install/arm/
#另一种无法指定host需要自己指定c编译器
CC=arm-himix200-linux-gcc ./configure --prefix=$HOME/my_project/install/arm/

进阶配置:
实际项目中一般需要进行库的裁剪,主要是去掉冗余的功能;这时候需要利用help进行查看当前库提供个裁剪命令;另一方面有时候需要库也会依赖一些其他库,这时候需要进行库依赖关系的指定。configure内容非常多可以单独开一篇文章,这里只是讲了常用的配置方法。

#查看库支持的情况,里面参数非常多,根据实际项目进行选取
./configure --help
#常见功能裁剪
CC=arm-himix200-linux-gcc ./configure --host=arm-himix200-linux \
--prefix=$HOME/my_project/install/arm/ \
--disable-xattr --disable-libelf 
#指定依赖库和依赖头文件文件
CC=arm-himix200-linux-gcc ./configure --host=arm-himix200-linux \
--prefix=$HOME/my_project/install/arm/ \
LIBFFI_CFLAGS='-I/home/my_project/install/arm/lib/libffi-3.2.1/include/' \
LIBFFI_LIBS='-lffi -L=/home/my_project/install/arm/lib' \
ZLIB_CFLAGS='-I/home/my_project/install/arm/include' \
ZLIB_LIBS='-lz -L/home/my_project/install/arm/lib' \

2.3.2 cmake

首先查看库的编译选项:

cmake -LH

基础配置:
cmake也是一个非常高效的的编译利器。具体详细描述见官方文档:cmake v3.22 官方文档
这里不进行cmakelist.txt文件的编写。主要介绍交叉编译种常用的一些方法。首先是指定交叉编译器,需要在源码根目录新增一个project.cmake文件。

#指定系统
SET(CMAKE_SYSTEM_NAME Linux)
#指定工具链目录
SET(TOOLCHAIN_PATH /opt/arm-himix200-linux)
#指定c编译器
SET(CMAKE_C_COMPILER /opt/arm-himix200-linux/bin/arm-himix200-linux-gcc)
#指定c++编译器
SET(CMAKE_CXX_COMPILER /opt/arm-himix200-linux/bin/arm-himix200-linux-g++)

SET(CMAKE_FIND_ROOT_PATH /home/my_project/arm/include/)

# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

接下来是编译:一般是创建一个build目录,然后进行编译。

#指定源码目录
#指定编译工具链
#开启某个功能和指定相关库和头文件
cmake $HOME/my_project/source/avs-device-sdk \
 -DCMAKE_TOOLCHAIN_FILE=../source/avs-device-sdk/AvsDeviceSdk.cmake \
 -DPORTAUDIO=ON \
 -DPORTAUDIO_LIB_PATH=$HOME/my_project/third-party/portaudio/lib/.libs/libportaudio.so \
 -DPORTAUDIO_INCLUDE_DIR=$HOME/my_project/third-party/portaudio/include

最后是安装:

cmake --install . --prefix "/home/my_project/install/arm"
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值