Ubuntu下编译android所需ffmpeg的so库
编译ffmpeg源码
环境说明
尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697
环境(包括版本)尽量下面的保持一致,其他环境不一定能成功。
系统: Ubuntu16.04 LTS
最好不要再windows系统下编译,可在windows中安装VMware虚拟一个linux系统出来,对linux系统不太熟悉的建议使用Ubuntu,入门比较快。
NDK版本: android-ndk-r9d
试过16、14、13版本都未成功,使用ndk-r9d才成功的。这里是下载地址:https://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2
ffmpeg版本: ffmpeg-3.2.9
使用过最新的ffmpeg-3.4编译并未成功,于是使用了3.2.9。下载地址(建议下载tar.bz2的):https://ffmpeg.org/download.html#releases
修改configure
在ffmpeg根目录找到configure文件,由于根据此配置文件(在ffmpeg源码的根目录)生成的so名字类似于libXXX.05421423.so;android不能失败了带有数字的so库;需要将生成so库名字的配置修改一下,主要有四个地方.
将以下的内容:
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)'
生成config.h文件
在ffmpeg根目录中输入一下命令:
./configure
如果有错误提示,根据提示来,在./configure 后面加上提示参数即可(注意是两个-),如:
创建编译脚本
在与ffmpeg同级目录创建一个用于存放编译后生成的动态库的文件夹,这里叫armlib
在与ffmpeg同级的目录下新建build-ffmpeg-arm.sh文件,内容为:
#!/bin/bash
#需要改成你的ffmpeg源码地址
cd /home/hdl/ffmpeg/ffmpeg-3.2.9
make clean
#需要改成你的ndk地址
export NDK=/home/hdl/tools/android-ndk-r9d
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt
export PLATFORM=$NDK/platforms/android-8/arch-arm
#这里是最后生成的库文件存放的位置,改成你自己的即可
export PREFIX=/home/hdl/ffmpeg/armlib
build_one(){
./configure --target-os=linux --prefix=$PREFIX \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-gpl --enable-shared --disable-static --enable-small \
--disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv6"
}
build_one
make
make install
cd ..
注意:以上生成的是armeabi类型的so,armeabi已能涵盖大部分安卓手机,其他类型的需要更改一下配置。
为build-ffmpeg-arm.sh授予可执行的权限
命令行下输入:
chmod +x build-ffmpeg-arm.sh
开始编译
./build-ffmpeg-arm.sh
等待几分钟,会在/home/hdl/ffmpeg/armlib(这是我自己的哦,即configure中设置的PREFIX地址)目录下面生成编译后的文件。
注意:请使用带有版本号的so文件(如:libavcodec-57.so),不带版本号的只是一个”快捷方式”
尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697
推荐阅读
-
Mac OS下为Android Studio编译FFmpeg解码库的详细教程
-
Android studio 下JNI编程实例并生成so库的实现代码
-
Mac OS下为Android Studio编译FFmpeg解码库的详细教程
-
Android studio 下JNI编程实例并生成so库的实现代码
-
ubuntu环境下反编译android apk的方法
-
关于编译Android下可执行命令的FFmpeg实例讲解
-
Ubuntu下编译VLC Android源码so库详解
-
如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)
-
Ubuntu下编译android所需ffmpeg的so库
-
Android Ubuntu下FFmpeg的编译教程