移植FFmpeg到RISC-V记录

Jiaolong...大约 1 分钟FFmpeg

./configure

一般手动编译分三步, configure 配置, make 编译 make install 安装

常规配置方法:

查看帮助选项./configure help,如果帮助选项中有 build 选项,只需在命令行加 --build=riscv64-unknown-elf

少部分程序在 configure help 没有 build 选项,需要手动运行 config.guess脚本 ,检测系统体系结构。

riscv64-unknown-linux-gnu-gcc

1. 编译 yasm

yasm是一个 汇编编译器,后面编译 x264 需要用到它,它能加快编译速度。

进入解压过的yasm文件夹

./configure --prefix=/usr/local --build=riscv64-unknown-linux-gnu

2. 编译pkg-config

./configure --prefix=/usr/local --build=riscv64-unknown-linux-gnu --with-internal-glib

3. 编译 libx264

./configure  --enable-shared --enable-static --prefix=/usr/local

ffmpeg编译configure

在ffmpeg目录下,查看所有可配置选项

./configure --help
  • –-arch可以指定架构

    可选值可在configure里搜索ARCH_LIST查看

  • --prefix 安装程序到指定目录(默认/usr/local)

  • --cross-prefix :编译工具路径

  • --enable-cross-compile:启用交叉编译器

./configure --cross-prefix=riscv64-unknown-linux-gnu- 
			--enable-cross-compile 
			--target-os=linux 
			--cc=riscv64-unknown-linux-gnu-gcc 
			--arch=riscv 
			--prefix=/usr/local/ffmpeg 
			--pkg-config=true 
			--pkgconfigdir=/usr/local/pkg-config 
			--enable-ffmpeg --disable-armv5te --disable-armv6 --disable-armv6t2 

综合:

./configure --cross-prefix=riscv64-unknown-linux-gnu- --enable-cross-compile --target-os=linux --cc=riscv64-unknown-linux-gnu-gcc --arch=riscv --prefix=/usr/local/ffmpeg --pkg-config=true --pkgconfigdir=/usr/local/pkg-config --enable-ffmpeg --disable-armv5te --disable-armv6 --disable-armv6t2 

报错记录

  1. WARNING: riscv64-unknown-elf-pkg-config not found, library detection may fail.
collect2: error: ld returned 1 exit status
make: *** [Makefile:131: ffmpeg_g] Error 1
 --pkg-config=true --pkgconfigdir=/usr/local/pkt-config
  1. error: 'PATH_MAX' undeclared here (not in a function)
In file included from libavcodec/v4l2_buffers.c:34:
libavcodec/v4l2_m2m.h:44:18: error: 'PATH_MAX' undeclared here (not in a function)
   44 |     char devname[PATH_MAX];
      |                  ^~~~~~~~
make: *** [ffbuild/common.mak:81: libavcodec/v4l2_buffers.o] Error 1

解决方案:

检查该文件,并引入头文件

#include <linux/limits.h>