记录: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库的交叉编译的主要内容,如果未能解决你的问题,请参考以下文章

zlog库的交叉编译

带wiringPi库的交叉编译

带有自定义共享库的 Qt 项目交叉编译 Qt

基于FS4412嵌入式系统移植 glib库的交叉编译与移植

音视频交叉编译动态库静态库的学习

linux下交叉编译libusb的方法及编译一个使用了libusb库的test程序的方法