RK3588 opencv与ffmpeg交叉编译

第二次做交叉编译遇到问题,决定写个帖子记录一下方便以后自己翻看。

opencv交叉编译

编译前准备

本人使用cmake-gui进行交叉编译,需要下载安装cmake和cmake-gui

sudo apt install cmake
sudo apt-get install cmake-gui

交叉编译

进入下载好的opencv源码,此处本人使用的是opencv-3.4.16
新建 一个build文件夹
在这里插入图片描述
进入该文件夹后启动gui

sudo cmake-gui

Where is the source code 选择OpenCV所在目录,Where to build the binaries选择OpenCV下的build文件夹:
此处参考:https://blog.youkuaiyun.com/wjpwjpwjp0831/article/details/128269371
在这里插入图片描述
之后点左下角的configure,进行如图配置:
在这里插入图片描述
点击next,然后如图配置:
在这里插入图片描述
点击finish,成功后,在Search栏中搜索PREFIX, 选定安装目录到install文件夹下:
在这里插入图片描述
再次点击configure,点击generate。
成功后执行:

sudo make -j8

其中-j8指的是使用八个核进行编译
成功后,运行:

make install

**注意!!!:此处的opencv交叉编译不是带上ffmpeg的交叉编译,我目前还不需要这个功能
**需要的话参考:https://juejin.cn/post/7145357203107479565

报错信息汇总:

报错一:

在make的过程中报错:

ld: ../../lib/libopencv_imgcodecs.so.3.4.16: undefined reference to `png_do_expand_palette_rgb8_neon'

解决办法:
找到3rdparty/libpng/CMakeLists.txt
在最上面加上添加如下语句:

SET(ARM 1)
SET(ENABLE_NEON 1)

添加完成后重新运行

sudo cmake-gui

重新配置和生成。

ffmpeg交叉编译

为了后续的推流工作需要使用ffmpeg环境

编译前准备

apt-get install build-essential pkg-config

x264下载:git clone http://git.videolan.org/git/x264.git
ffmpeg源码下载:https://ffmpeg.org/download.html#releases

交叉编译x264

参考:https://blog.youkuaiyun.com/weixin_45824067/article/details/133465605
动态库:

./configure --prefix=/home/topeet/Documents/tool/x264arm --host=arm-linux --cross-prefix=aarch64-linux-gnu- --disable-asm --enable-shared


make -j8
sudo make install

静态库:

./configure --prefix=/home/topeet/Documents/tool/x264arm --host=arm-linux --cross-prefix=aarch64-linux-gnu- --disable-asm
	
make clean;make -j8
sudo make install

至此完成x264的交叉编译

交叉编译ffmpeg

参考:https://blog.youkuaiyun.com/m0_46493410/article/details/136279956?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-136279956-blog-131804601.235v43pc_blog_bottom_relevance_base7&spm=1001.2101.3001.4242.1&utm_relevant_index=3
首先解压ffmpeg源码包

tar -zxvf ffmpeg-4.2.9.tar.gz

进入:

cd ffmpeg-4.2.9

由于x264的pkgconfig不叫pkg-config,这会导致后续ffmpeg交叉编译时找不到x263的库,但是又不敢乱改文件夹名字,所以这里参考:https://blog.youkuaiyun.com/qq_25105163/article/details/107109419

编辑/etc/profile:

sudo vi /etc/profile

添加这一行:

export PKG_CONFIG_PATH=$X264_HOME/lib/pkgconfig

然后保存,执行

source /etc/profile

然后再进行带x264的ffmpeg的交叉编译:

./configure --enable-cross-compile --target-os=linux --arch=aarch64 \
	--cross-prefix=/home/topeet/Documents/opt/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu- \
	--cc=/home/topeet/Documents/opt/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
	--cxx=/home/topeet/Documents/opt/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \
	--prefix=/home/topeet/Documents/tool/ffmpeg-4.2.9arm \
	--extra-cflags=-I/home/topeet/Documents/tool/x264arm/include \
	--extra-ldflags=-L/home/topeet/Documents/tool/x264arm/lib \
	--disable-asm --enable-parsers --disable-decoders --enable-decoder=h264 --disable-debug --enable-ffmpeg --enable-shared --disable-static --disable-stripping --disable-doc --enable-libx264 --enable-gpl

执行make命令编译,并查看是否编译成功,有无报错。

make -j$(nproc)
 
make install

至此完成ffmpeg的交叉编译

<think>好的,我现在需要帮助用户找到在RK3588平台上交叉编译FFmpeg的教程或配置方法。首先,用户提到了参考的引用内容,里面有关于交叉编译OpenCVFFmpeg的信息,但需要仔细分析哪些部分相关。 首先,查看引用[1],里面提到将FFmpeg生成的文件复制到交叉编译工具的usr目录下,这可能涉及FFmpeg交叉编译步骤。引用[2]的标题明确提到了RK3588交叉编译FFmpeg-4.2.9,看起来有详细的步骤,比如下载、编译动态库和静态库,以及配置环境。引用[3]则提到需要注意OpenCV交叉编译是否带FFmpeg,但用户可能需要的是单独的FFmpeg编译,所以重点可能在引用[2]。 接下来需要整理用户可能的步骤。通常交叉编译FFmpeg需要配置交叉编译工具链,设置环境变量,配置FFmpeg的编译选项,指定目标平台架构(如aarch64),以及安装必要的依赖库。用户提供的引用[2]中提到了编译x264,这可能是一个依赖项,所以可能需要先编译x264,再编译FFmpeg。 需要确保步骤中的路径正确,例如交叉编译器的位置,头文件和库文件的路径是否正确。引用[2]中提到的目录结构可能很重要,比如将x264和FFmpeg的源码放在特定位置,然后配置编译参数。此外,检查pkg-config的输出是否正确,确保FFmpeg能找到依赖库。 可能遇到的常见问题包括配置选项错误、依赖库缺失或路径不正确,以及交叉编译工具链未正确设置。用户可能需要按照引用[2]中的步骤,先安装必要的环境,然后逐步编译x264和FFmpeg,注意修改detect_ffmpeg.cmake这样的配置文件,以确保正确链接库。 最后,生成相关问题时要考虑用户可能的后续问题,比如如何验证FFmpeg是否正确编译,如何处理依赖项,或者如何将FFmpeg集成到其他项目中如OpenCV。需要确保回答结构清晰,分步骤说明,并引用正确的参考资料。</think>### RK3588交叉编译FFmpeg的步骤说明 #### 1. 准备交叉编译工具链 首先需安装适用于RK3588(ARM架构)的交叉编译工具链。建议使用官方推荐的`aarch64-linux-gnu`工具链,并确保路径已加入`PATH`环境变量: ```bash export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ ``` #### 2. 编译依赖库x264 FFmpeg依赖x264编码器,需先交叉编译x264: ```bash # 下载x264源码 git clone https://code.videolan.org/videolan/x264.git cd x264 # 配置交叉编译参数 ./configure --prefix=/opt/x264_arm \ --host=aarch64-linux-gnu \ --enable-shared \ --enable-static make -j$(nproc) && make install ``` #### 3. 编译FFmpeg 配置FFmpeg时需指定交叉编译参数和依赖库路径: ```bash # 下载FFmpeg-4.2.9源码 wget https://ffmpeg.org/releases/ffmpeg-4.2.9.tar.gz tar -zxvf ffmpeg-4.2.9.tar.gz && cd ffmpeg-4.2.9 # 配置编译选项 ./configure \ --prefix=/opt/ffmpeg_arm \ --arch=aarch64 \ --target-os=linux \ --enable-cross-compile \ --cross-prefix=aarch64-linux-gnu- \ --enable-shared \ --disable-static \ --enable-gpl \ --enable-libx264 \ --extra-cflags="-I/opt/x264_arm/include" \ --extra-ldflags="-L/opt/x264_arm/lib" make -j$(nproc) && make install ``` #### 4. 验证移植 编译完成后,检查`/opt/ffmpeg_arm`目录下的`bin`、`lib`、`include`文件,将其复制到RK3588设备的对应路径中。通过`file`命令验证二进制文件架构: ```bash file ffmpeg # 应显示"ARM aarch64" ``` #### 关键配置说明 - `--cross-prefix`:指定交叉编译工具前缀。 - `--extra-cflags`和`--extra-ldflags`:指向交叉编译的x264库路径。 - 若需其他编解码器(如libmp3lame),需预先交叉编译并添加对应参数[^2][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值