FFMPEG编译生成动态库
为什么要用NDK编译: 对于开发Android的小伙伴,对于NDK肯定不会感到陌生。在Android世界里联通java和c代码的利器jni就离不开NDK。作为一名合格的程序猿,在学习工作中肯定会有需要用到网络上的各种开源库,所以首先,我们需要能够编译出我们需要的动态库。 为什么要用NDK编译呢?一般Linux系统默认都会有安装gcc编译器,使用gcc就可以编译动...
为什么要用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
版权声明:本文为博主原创文章,转载请附上博文链接!
更多推荐
所有评论(0)