这篇文章主要介绍编译这一步骤。
1.首先得对shell脚本有所了解
shell脚本是Linux系统的外壳,为用户提供了使用操作系统的接口。他是命令语言、命令解释程序、以及程序设计语言的统称。
这边文章先不介绍shell脚本的编写,直接先用起来吧。
2.既然不介绍shell脚本的编写,那就先从网上下载一个脚本吧。(当然我自己有)
3.上传build_android.sh到ffmpeg-2.6.9文件夹下。
这个过程也有很多坑。。
--这个从window下编写的build_android .sh是window的编码,即便你已经成功上传,但是在Linux下也编译不了
--你在明明看到build_android.sh文件,但是使用./build_android.sh 的时候会报找不到文件的错误
解决这个问题呢有两种方式(推荐使用第二种)
a)在xshell下新建build_android.sh 文件 -->touch build_android.sh 这个时候就是Linux系统的编码
将新建的build_android.sh文件(空的)拷贝到window下编辑好后再重新上传
b).上传window下写好的build_android.sh 文件到Linux,利用 dos2unix 软件将window编码转为Linux编码。
你会发现dos2unix这个软件并没有,(又需要安装-->sudo apt-get install dos2unix )
然后直接执行命令:dos2unix 将整个文件夹下的文件都更变编码方式
5.如果还有一些权限问题的话都可以自己解决了。
6.编译
./build_android.sh
执行这个命令之后皆可以发现在build了,
编译完成后再ffmpeg-2.6.9 目录下会出现一个android目录。
android
*arm
*include
*lib
如下:
7.走到这里你以为就成功编译了吗??哈哈,,错误的,你可以发现lib 目录下出现很多.so.56这样的文件,还有大版本和小版本的区分。。
这样的文件在Android里面是不能用的。。编译失败了吗??其实已经基本成功了只需要更改一个配置就行了。在ffmpeg-2.6.9的目录下有这么一个文件
叫做configure。在build_adroid.sh脚本中引用了这个文件。修改这个文件(如下图修改)文件后,重新上传,再次编译,你会发现你想要的东西真的成功了。
8.总结
关于build_andoid.sh 这个脚本内容如下:
#!/bin/bash
make clean
export NDK=/usr/ndk/android-ndk-r10d
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
一定注意格式,一个不小心就会报错。。
之后会带来怎么使用编译好了的so库。