linux环境ndk编译ffmpeg问题

windows平台的ffmpeg相关库可以在官网直接下载,但linux由于工具链不同,使用的时候大多需要自己手动去编译。本文记录了此次编译过程中遇到的一些问题。

1、ffmepg源码下载,ndk下载安装。没有难度,网上很多文章介绍。

2、编译ffmpeg。

  • 编译选项配置,可参考下面shell脚本。主要包括设置编译链,设置编译的功能模块。如果没有将不相关的模块disable掉的话,编译出来的库文件会非常大,尤其是avcodec,会达到一百多兆。(具体配置以实际需求为准)

#!/bin/sh
#--disable-avdevice
NDK=/opt/android-ndk-r9/
export PATH=$PATH:$NDK
SYSROOT=$NDK/platforms/android-8/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
function build_one
{
./configure \
--prefix=$PREFIX \
--disable-shared \
--enable-static \
--disable-yasm \
--disable-decoders  --enable-decoder=aac --enable-decoder=h264 \
--disable-muxers \
--disable-parsers --enable-parser=aac --enable-parser=h264 \
--disable-filters \
--disable-avfilter \
--disable-swscale \
--disable-encoders \
--enable-small \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-debug \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT
make clean
make -j4
make install
}
CPU=armv7-a
PREFIX=$(pwd)/android/$CPU
build_one
  • 执行shell脚本,开始编译。这里要注意,如果不小心将某个编译配置项写错了,则所有配置都不会生效。执行后注意观察结果。出现类似如下图日志,最后其实还是按照默认配置去编译的。                                                                                  Unknown option "--enable-decoders=aac". See ./configure --help for available options.

  • 编译完成后,库文件默认是在/user/local/lib 下面,不过也可以自己设置。具体用法查看./configure --help

3、其它编译问题

ffmpeg编译本身难度不大,无非就是设置好编译选项,直接make就好。但是在使用编译出来的库文件时,又遇到了其它编译问题。大概有这么几类:

1、/bin/sh^M: 坏的解释器: 没有那个文件或目录

一般是由于从windows环境下拷贝到linux后结尾多了"\r"导致,可以直接用sed -i 's/\r$//'  文件名  将\r替换掉。在执行shell脚本就没问题了。

2、找不到头文件,如stdio.h:50:23: fatal error: sys/cdefs.h: No such file or directory

用linux标准gcc编译一般可能没这问题,我是用ndk编译时报了这个错。后来查到引用头文件的位置不对,重新指定下就好。在编译c或c++时指定对应头文件位置。

#g++头文件的路径
C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/android-ndk-r9/platforms/android-8/arch-arm/usr/include
export C_INCLUDE_PATH

#gcc头文件的路径
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/opt/android-ndk-r9/platforms/android-8/arch-arm/usr/include
export CPLUS_INCLUDE_PATH

3、找不到库文件。

#找到动态链接库的路径

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/android-ndk-r9/platforms/android-8/arch-arm/usr/lib
export LD_LIBRARY_PATH
 
#找到静态库的路径

LIBRARY_PATH=$LIBRARY_PATH:/opt/android-ndk-r9/platforms/android-8/arch-arm/usr/lib
export LIBRARY_PATH
 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值