为什么要用NDK编译:
        对于开发Android的小伙伴,对于NDK肯定不会感到陌生。在Android世界里联通java和c代码的利器jni就离不开NDK。作为一名

合格的程序猿,在学习工作中肯定会有需要用到网络上的各种开源库,所以首先,我们需要能够编译出我们需要的动态库。

       为什么要用NDK编译呢?一般Linux系统默认都会有安装gcc编译器,使用gcc就可以编译动态库,但是编出来的库在Android设备

上是用不了(以PC架构为x86,移动设备架构为arm为例,大都数情况是这样的),因为架构不同,动态库没办法通用。这个时候你

可以搭建arm交叉编译环境,对于Android小伙伴建议使用NDK,它已经集成了arm交叉编译环境,使用起来相对还是挺方便的。而且

使用jni时候的时候也少不了要用到它。


第一步:源代码下载
        源码可以去FFMPEG官网(https://ffmpeg.org)下载最新源代码,怎么下载以及需要下载哪个版本,在这里就不赘述了。提醒

一下使用git下载的小伙伴,下面的git语句可能是下不下来的,坑已填,用http替换https试试!

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

第二步:去版本后缀
        到这里,应该已经在Linux环境下载好了源码了吧。                                                                                                                 

       FFMPEG默认编译出来的库后缀是有加版本号的,这种Android上似乎是加载不了哇!别着急,稍微改改就成。将configure文件

中的下面四行:

        SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'

        LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'

        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'

        SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
替换为:
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'

        LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'

        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'

        SLIB_INSTALL_LINKS='$(SLIBNAME)'

第三步:编译
        磨刀不误砍柴功,先写个编译脚本一劳永逸。vi build_android.sh
1 #!/bin/bash
  2 NDK=/home/Android/NDK/android-ndk-r13b
  3 SYSROOT=$NDK/platforms/android-23/arch-arm/
  4 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
  5 
  6 function build_one
  7 {
  8     ./configure \
  9         --prefix=$PREFIX \
 10         --enable-shared \
 11         --disable-static \
 12         --disable-doc \
 13         --disable-ffserver \
 14         --enable-cross-compile \
 15         --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
 16         --target-os=linux \
 17         --arch=arm \
 18         --sysroot=$SYSROOT \
 19         --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
 20         --extra-ldflags="$ADDI_LDFLAGS" \
 21         $ADDITIONAL_CONFIGURE_FLAG
 22 }
 23 CPU=arm
 24 PREFIX=$(pwd)/android/$CPU
 25 ADDI_CFLAGS="-marm"
 26 build_one
        NDK是机器上NDK代码的路径,需要换成对应的,SYSROOT和TOOLCHAIN如果目录存在的话,可以不用修改。然后给脚本可执行权限, chmod +x build_android.sh。./build_android.sh执行生成Makefile。
        然后执行make -j8 && make install成功后,就会在指定的$PREFIX目录下生成FFMPEG所有的动态库了。

        在路上!
--------------------- 
作者:Jacky-G 
来源:CSDN 
原文:https://blog.csdn.net/u013007470/article/details/53792027 
版权声明:本文为博主原创文章,转载请附上博文链接!

Logo

更多推荐