交叉编译 opencv - 简书
2023-6-21
| 2023-7-16
0  |  0 分钟
type
status
date
Jun 21, 2023 09:35 AM
slug
summary
tags
category
icon
password
没有多少嵌入式的经验的我, 第一次搞交叉编译, 记录以下过程, 方便以后查证.

我的环境

系统: ubuntu20.04
交叉编译工具: aarch64-linux-gnu
芯片: rk3588

编译依赖

1. 编译 zlib(zlib-1.2.12.tar.gz)

生成 makefile:
./configure –prefix=/home/alex/opencv_3rdparty –shared
修改 MakeFile:
CC=aarch64-linux-gnu-gcc
AR=aarch64-linux-gnu-ar
LDSHARED=aaarch64-linux-gnu-gcc…(只修改前缀)
RANLIB=aarch64-linux-gnu-ranlib
编译:
make&&make install (安装路的路径如果因有权限要求就加上 sudo)

2. 编译 jpeg(jpegsrc.v9b.tar.gz)

生成 makefile:
./configure –prefix=/home/alex/opencv_3rdparty –enable-shared –enable-static –host=aarch64-linux-gnu
编译过程同上

3. 编译 libpng(libpng-1.6.37.tar.xz)

注意: 这里需要依赖 zlib.
生成 makefile:
./configure -host=aarch64-linux-gnu -prefix=/home/alex/opencv_3rdparty –enable-shared –enable-static LIBS=-L/home/alex/opencv_3rdparty/lib CPPFLAGS=-I/home/alex/opencv_3rdparty/include
编译过程同上

4. 编译 yasm(yasm-1.3.0.tar.gz)

生成 makefile:
./configure –prefix=/home/alex/opencv_3rdparty –host=aarch64-linux-gnu
编译过程同上

5. 编译 x264(x264-master.tar.bz2)

生成 makefile:
CC=aarch64-linux-gnu-gcc ./configure –prefix=/home/alex/opencv_3rdparty –enable-shared –host=aarch64-linux-gnu –disable-asm
编译过程同上

6. 编译 libxvid(xvidcore-1.3.3.tar.gz)

生成 makefile:
./configure –prefix=/home/alex/opencv_3rdparty –disable-assembly –host=aarch64-linux-gnu
编译过程同上

7. 编译 ffmpeg(ffmpeg-4.2.7.tar.xz)

注意: 编译选项 –arch=aarch64
生成 makefile 前需要修改一下环境, 否则会提示 yasm 找不到, 当然也可以根据提示使用 –disable-x86asm 跳过这一项, 但不知道影响有多大:
生成 makefile:
./configure –prefix=/home/alex/opencv_3rdparty –enable-shared –disable-static –enable-gpl –enable-cross-compile –arch=aarch64 –disable-stripping –target-os=linux –enable-libx264 –enable-libxvid –cc=aarch64-linux-gnu-gcc –enable-swscale –extra-ldflags=-L/home/alex/opencv_3rdparty/lib –extra-cflags=-I/home/alex/opencv_3rdparty/include
编译过程同上

8. 编译 opencv

一定要先设置环境变量, 否则会找不到 ffmpeg 等错误.
export PKG_CONFIG_PATH=/home/alex/opencv_3rdparty/lib/pkgconfig
export LD_LIBRARY_PATH=/home/alex/opencv_3rdparty/lib
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/home/alex/opencv_3rdparty/lib
notion image
修改 cmake
生成 makefile:
cmake -D CMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake ../
notion image
image.png
检查 ffmpeg, 以及之前编译的库是否能找到. 没问题就和上面一样开始编译 make -j8.
notion image
大功告成

问题总结

  1. 芯片类型不一样, 编译时要选择的工具有差异, 编译时的选项也是有差异的, 比如编译 ffmpeg 时的 –arch 选项如果我和参考连接中一样 arm 是无法编译的.(这些暂时还不太明白, 暂时也没有时间从头学习, 以后再学习) 2.yasm 应该是不必要的 (我不确定, 但查问题的过程中看到很多帖子里都是 disable 掉的, 这个主要和 x86 相关我的目标机器时 arm)

参考连接

yasm 找不到的问题遇到的问题:https://github.com/open-mmlab/denseflow/issues/36
opencv4.2.0 can’t find ffmpeg:https://github.com/opencv/opencv/issues/19906#issuecomment-820157275 > 本文由简悦 SimpRead 转码
工作学习
  • Linux
  • 图像编程
  • Raspberry
  • 折腾
  • OpenCV
  • python 类的属性可以直接数组形式访问Windows server 是我目前最佳工作站
    目录