记录:libav库的交叉编译
Posted fanchenxinok
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录:libav库的交叉编译相关的知识,希望对你有一定的参考价值。
为了在板子上跑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
以上是关于记录:libav库的交叉编译的主要内容,如果未能解决你的问题,请参考以下文章