ffmpefg arm64库文件源码编译
2017-12-21 14:44
148 查看
因android studio工程需要,需要编译ffmpeg64位的so库,参考了很多文档总是出错,最后终于成功,使用的环境是centos7,需要安装gcc,ndk的版本是android-ndk-r14b-linux-x86_64,ffmpeg的版本是ffmpeg-3.2.9,之前编译过ffmpeg3.4.1,64位一直没成功且总出错,最后终于成功。请参考以下说明。
1、文件下载按上面的说明下载需要的源码文件
2、配置系统环境变量,在/etc/profile的末尾添加
NDKROOT=/home/suirui/android-ndk-r14b
export PATH=$NDKROOT:$PATH
添加完成后,执行source /etc/profile立即生效
3、在解压后的ffmpeg的源码路径下,找到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)'
4、编写sh脚本,若使用64位arm,请直接copy下面文本,将编写好的sh脚本放在ffmpeg的根目录下,添加可执行权限
需要根据自己机器的实际情况,修改NDK、SYSROOT和TOOLCHAIN的路径,在指定的PREFIX下,创建sh中使用的路径,该例子中是在ffmpeg的根目录下创建android/arm64-v8a该文件夹
#!/bin/bash
NDK=/home/android-ndk-r14b
SYSROOT=$NDK/platforms/android-22/arch-arm64
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--target-os=linux \
--arch=aarch64 \
--sysroot=$SYSROOT
#--extra-cflags="-O3 -DANDROID -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing" \
#--extra-ldflags="$ADDI_LDFLAGS"
}
CPU=arm64-v8a
PREFIX=$(pwd)/android/$CPU
ADDI_LDFLAGS="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog"
build_one
make -j8
make install
5、如果之前执行make失败过,请先执行make uninstall和make clean
6、在ffmpeg目录下执行sh脚本,生成的so文件在创建的PREFIX(android/arm64-v8a)路径下
7、如果需要编译32位的话,需要改动几个地方
SYSROOT=$NDK/platforms/android-22/arch-arm64,改成SYSROOT=$NDK/platforms/android-22/arch-arm
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64,改成arm-linux-androideabi-4.9/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android-,改成--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi
--arch=aarch64 ,改成--arch=arm
CPU=arm64-v8a,改成CPU=arm
在ffmpeg的目录下创建android/arm文件夹,用于prefix输出文件
其他的不用修改,直接执行,生成的库文件在android/arm下
注意:此文档只编译成功了3.2.9版本,其他的版本没有试
1、文件下载按上面的说明下载需要的源码文件
2、配置系统环境变量,在/etc/profile的末尾添加
NDKROOT=/home/suirui/android-ndk-r14b
export PATH=$NDKROOT:$PATH
添加完成后,执行source /etc/profile立即生效
3、在解压后的ffmpeg的源码路径下,找到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)'
4、编写sh脚本,若使用64位arm,请直接copy下面文本,将编写好的sh脚本放在ffmpeg的根目录下,添加可执行权限
需要根据自己机器的实际情况,修改NDK、SYSROOT和TOOLCHAIN的路径,在指定的PREFIX下,创建sh中使用的路径,该例子中是在ffmpeg的根目录下创建android/arm64-v8a该文件夹
#!/bin/bash
NDK=/home/android-ndk-r14b
SYSROOT=$NDK/platforms/android-22/arch-arm64
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--target-os=linux \
--arch=aarch64 \
--sysroot=$SYSROOT
#--extra-cflags="-O3 -DANDROID -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing" \
#--extra-ldflags="$ADDI_LDFLAGS"
}
CPU=arm64-v8a
PREFIX=$(pwd)/android/$CPU
ADDI_LDFLAGS="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog"
build_one
make -j8
make install
5、如果之前执行make失败过,请先执行make uninstall和make clean
6、在ffmpeg目录下执行sh脚本,生成的so文件在创建的PREFIX(android/arm64-v8a)路径下
7、如果需要编译32位的话,需要改动几个地方
SYSROOT=$NDK/platforms/android-22/arch-arm64,改成SYSROOT=$NDK/platforms/android-22/arch-arm
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64,改成arm-linux-androideabi-4.9/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android-,改成--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi
--arch=aarch64 ,改成--arch=arm
CPU=arm64-v8a,改成CPU=arm
在ffmpeg的目录下创建android/arm文件夹,用于prefix输出文件
其他的不用修改,直接执行,生成的库文件在android/arm下
注意:此文档只编译成功了3.2.9版本,其他的版本没有试
相关文章推荐
- 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件)
- OSCache的源码编译Cache.java 文件报add(Class, T) in the type EventListenerList is not applicable for the arguments 错误的解决
- pyc文件反编译到Python源码
- 如何编译NutchAnalysis.jj文件,生成java源码
- 如何反编译apk文件得到源码和XML文件
- linux环境下编译源码和运行程序时,include文件和lib库文件的注意事项
- ant打jar包时, 怎么把所依赖的jar包与从源码中编译过来class文件合并成最终的一个jar?
- 厂商HAL层库文件 xxx.xxx.so添加到源码中编译到系统镜像中
- 浅析Class文件反编译后的文件与源码文件大小关系
- Android 源码/NDK下编译C/C++的可执行文件
- 如何反编译apk文件得到源码和XML文件
- 通过mk文件编译android4.0.3系统app源码后覆盖安装失败解决办法(android odex文件)
- Linux下通过源码编译安装程序(configure/make/make install的作用,然后在/etc/profile文件里修改PATH环境变量)
- android源码编译--mk文件详解
- protoc编译proto文件之Java源码结构分析二(person.proto)
- ant打jar包时, 怎么把所依赖的jar包与从源码中编译过来class文件合并成最终的一个jar?
- Android4.4.2 MTK6572 编译源码修改文件
- .jar文件参与android源码编译
- 《UNIX网络编程(第3版)》unp.h等源码文件的编译安装
- IDEA - 如何将maven项目src下的源码目录内的xml文件编译进入classes