瑞芯微mpp库交叉编译

交叉编译

1.交叉编译的必要性

我们在开发板上进行开发时,很多时候不会直接在板子上开发,而是在自己电脑上写代码、编译和运行。在自己电脑上编译成功并成功运行就行了吗?并不是,主要是底层架构的原因,我们自己使用的电脑基本都是x86架构或者是x86_64,而开发板上基本都是arm64,不同架构使用不同的指令集,因此可以在自己电脑上能成功运行不代表在开发板上也能成功运行;

其次,某些依赖库比如瑞芯微的mpp硬件编码库,他是要依赖于开发板环境的,我们在写代码的时候要用到这个编码库,如果这个库编译的架构的不对,我们的代码也无法编译通过。

为了能在x86环境下编译arm64的源代码,因此引入了交叉编译链,交叉编译链可以使我们在x86上编译arm64的源码,且编译成功可以直接拿到板子上运行(前提是板子上其他依赖库也配置好了)。

我的真实应用场景

之前某所项目的时候,我们使用某个板子中的RK3588芯片,底层架构是arm64,因此我们从git上拉取瑞芯微自己的mpp硬件编码库,按照文档在板子上编译mpp库,结果死活编译不过去,一直在一个底层数学库报错,就这个问题,我去网上搜各种方法,其中有一个方法是升级glibc库,结果升级了系统都进不去了,只能重新刷机。反正这个编译不过去的问题花了大概3-4天时间才解决,解决方案就是交叉编译。

2.交叉编译链的配置

2.1 下载交叉编译链

下载链接

链接:https://pan.baidu.com/s/1uxElxYOpLMe1A2Y_BeQOgg?pwd=9830
提取码:9830

2.2 创建文件夹并将交叉编译链放入文件夹

sudo mkdir -p /usr/local/ARM-toolchain
sudo mv gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar /usr/local/ARM-toolchain/
cd /usr/local/ARM-toolchain

2.3 解压交叉编译链

sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar 

2.4 配置环境变量

sudo vim ~/.bashrc

在~/.bashrc最后一行添加一行:

PATH=/usr/local/ARM-toolchain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:"${PATH}"

激活环境变量:

source ~/.bashrc

查看是否配置好了:

aarch64-linux-gnu-gcc -v

使用内建 specs。
COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/usr/local/ARM-toolchain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/…/libexec/gcc/aarch64-linux-gnu/7.5.0/lto-wrapper
目标:aarch64-linux-gnu
配置为:‘/home/tcwg-buildslave/workspace/tcwg-make-release_0/snapshots/gcc.git~linaro-7.5-2019.12/configure’ SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --with-system-zlib --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-arch=armv8-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/sysroots/aarch64-linux-gnu --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=aarch64-linux-gnu --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu
线程模型:posix
gcc 版本 7.5.0 (Linaro GCC 7.5-2019.12)

3.在x86上编译arm64的mpp库

3.1 拉取代码

git clone https://github.com/rockchip-linux/mpp.git

3.2 配置工具链

cd mpp/build/linux/aarch64
bash make-Makefiles.bash 

3.3 编译

make -j4

编译成功后,在linux系统下将mpp文件夹压缩才能拖到windows系统上,直接拉的话文件夹中的动态链接库会失效,后面使用mpp库就直接把这个压缩包拉到板子上解压使用就行了。

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值