为了在板子上跑h264解码程序需要用到libavcodec, libavformat, libavutil三个函数库,这三个库的源码都可以在libav下找到,因此我下载了libav源码来交叉编译而不是ffmpeg源码,查了半天发现没有比较好的指导性的文章,libav的官网也没有这个文档。所以记录下交叉编译的过程,供大家参考。
1,首先下载libav的源码:
$ git clone https://github.com/libav/libav.git
2, 进入libav目录执行下面命令配置环境变量并生成Makefile文件:
./configure --disable-x86asm --enable-shared --extra-cflags="-fPIC" --extra-ldflags="-lrt -lm -ldl" --arch=aarch64 --target-os=linux --enable-cross-compile \
--cross-prefix=/home/test/x86_64-arago-linux/usr/bin/aarch64-linux-gnu- \
--sysroot=/home/test/sysroots/aarch64-linux/
下面对上面的参数进行说明:(也可以执行./configure -h 查看参数说明)
--enable-shared: 默认编译出来的库是*.a的静态库,如果想编*.so的动态库需要加这个选项。
--extra-cflags="-fPIC" : 添加而外的编译选项,编动态库需要加这个编译选项。
--extra-ldflags="-lrt -lm -ldl": 添加而外的链接选项。
--arch=aarch64: 机器的架构。可以打开configure查看,列出支持的架构如下:
ARCH_LIST="
aarch64
alpha
arm
avr32
avr32_ap
avr32_uc
bfin
ia64
m68k
mips
mips64
parisc
ppc
ppc64
s390
sh4
sparc
sparc64
tilegx
tilepro
tomi
x86
x86_32
x86_64
"
--target-os=linux: 目标机操作系统类型选择linux (查看configure可以看到Os的类型有:aix, android, haiku, sunos,
netbsd, openbsd/bitrig, dragonfly, freebsd, bsd/os, darwin, msvs*, mingw32*, mingw64*, win32, win64, cygwin*, linux,
*-dos, freedos, opendos, irix*, os/2*, gnu, kfreebsd, symbian, minix)
--enable-cross-compile: 因为是交叉编译所以必须enable。
--cross-prefix=/home/test/x86_64-arago-linux/usr/bin/aarch64-linux-gnu- :配置gcc编译器的前缀
--sysroot=/home/test/sysroots/aarch64-linux/:配置系统路径,就是stdio.h,stdlib.h等的位置。
3,执行make即可。
如果configure过程遇到问题,可以按提示去检查,可以通过./configure -h查看各个参数的说明。
特此记录。
后来发现,libav没有ffmpeg维护那么好,顺带记录下ffmpeg的交叉编译:
1, 下载ffmpeg源码地址:http://ffmpeg.org
2,执行configure, 选项基本一致
./configure \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=/home/test/x86_64-arago-linux/usr/bin/aarch64-linux-gnu- \
--enable-shared \
--disable-static \
--sysroot=/home/test/linux-devkit/sysroots/aarch64-linux/ \
--extra-cflags="-fPIC" \
--extra-ldflags="-lrt -lm -ldl" \
--arch=aarch64 \
--target-os=linux
3, 执行make