1、android 官网下载 android ndk 选择 Linux 版本

wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip

2、下载完成后使用 unzip 解压

unzip android-ndk-r16b-linux-x86_64.zip

3、配置环境变量

export NDK_ROOT=/root/android-ndk-r16bexport PATH=$NDK_ROOT:$PATH

4、从官网下载FFmpeg的源码:

wget https://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2

下载完成后使用tar工具解压:

tar xvf ffmpeg-4.0.2.tar.bz2

解压出来后进入ffmpeg解压目录,可以看到里面有各种文件、文档。需要关注的是configure文件。这个文件本身就是一个shell脚本,作用为生成makfile文件,然后使用make执行。 下面是交叉编译shell脚本内容:

#!/bin/bash#这里定义变量,后续会使用#TOOLCHAIN 变量指向ndk中的交叉编译gcc所在的目录TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64#FLAGS与INCLUDES变量 可以从AS ndk工程的.externativeBuild/cmake/debug/armeabi-v7a/build.ninja中拷贝,需要注意的是**地址**FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11  -O0 -fPIC"INCLUDES="-isystem $NDK_ROOT/sources/cxx-stl/llvm-libc++/include -isystem $NDK_ROOT/sources/android/support/include -isystem $NDK_ROOT/sources/cxx-stl/llvm-libc++abi/include"#此变量用于编译完成之后的库与头文件存放在哪个目录PREFIX=./android/armeabi-v7a2#执行configure脚本,用于生成makefile#--prefix : 安装目录#--enable-small : 优化大小#--disable-programs : 不编译ffmpeg程序(命令行工具),我们是需要获得静态(动态)库。#--disable-avdevice : 关闭avdevice模块,此模块在android中无用#--disable-encoders : 关闭所有编码器 (播放不需要编码)#--disable-muxers :  关闭所有复用器(封装器),不需要生成mp4这样的文件,所以关闭#--disable-filters :关闭视频滤镜#--enable-cross-compile : 开启交叉编译(ffmpeg比较**跨平台**,并不是所有库都有这么happy的选项 )#--cross-prefix: 看右边的值应该就知道是干嘛的,gcc的前缀 xxx/xxx/xxx-gcc 则给xxx/xxx/xxx-#disable-shared enable-static 不写也可以,默认就是这样的。#--sysroot: #--extra-cflags: 会传给gcc的参数#--arch --target-os : 不给不行,为什么给这些值,见视频./configure \--prefix=$PREFIX \--enable-small \--disable-programs \--disable-avdevice \--disable-encoders \--disable-muxers \--disable-filters \--enable-cross-compile \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--disable-shared \--enable-static \--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \--extra-cflags="$FLAGS $INCLUDES" \--extra-cflags="-isysroot $NDK_ROOT/sysroot" \--arch=arm \--target-os=android #上面运行脚本生成makefile之后,使用make执行脚本make cleanmake install

注:如果出现以下错误

/root/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc is unable to create an executable file.C compiler test failed.

目录ffmpeg-4.0.2/ffbuild/config.log 下查看 config.log 报错信息

END /tmp/ffconf.iXGWyKi9/test.c/root/ndk/android-ndk-r10b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/root/ndk/android-ndk-r10b/platforms/android-21/arch-arm -isystem /root/ndk/android-ndk-r10b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -O0 -fPIC -isystem /root/ndk/android-ndk-r10b/sources/cxx-stl/llvm-libc++/include -isystem /root/ndk/android-ndk-r10b/sources/android/support/include -isystem /root/ndk/android-ndk-r10b/sources/cxx-stl/llvm-libc++abi/include -isysroot /root/ndk/android-ndk-r10b/sysroot -E -o /tmp/ffconf.iXGWyKi9/test.o /tmp/ffconf.iXGWyKi9/test.ccc1: warning: command line option '-std=c++11' is valid for C++/ObjC++ but not for Ctest_ld cctest_ccBEGIN /tmp/ffconf.iXGWyKi9/test.c    1int main(void){ return 0; }END /tmp/ffconf.iXGWyKi9/test.c/root/ndk/android-ndk-r10b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/root/ndk/android-ndk-r10b/platforms/android-21/arch-arm -isystem /root/ndk/android-ndk-r10b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -O0 -fPIC -isystem /root/ndk/android-ndk-r10b/sources/cxx-stl/llvm-libc++/include -isystem /root/ndk/android-ndk-r10b/sources/android/support/include -isystem /root/ndk/android-ndk-r10b/sources/cxx-stl/llvm-libc++abi/include -isysroot /root/ndk/android-ndk-r10b/sysroot -march=armv7-a -c -o /tmp/ffconf.iXGWyKi9/test.o /tmp/ffconf.iXGWyKi9/test.ccc1: warning: command line option '-std=c++11' is valid for C++/ObjC++ but not for C/root/ndk/android-ndk-r10b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/root/ndk/android-ndk-r10b/platforms/android-21/arch-arm -march=armv7-a -o /tmp/ffconf.iXGWyKi9/test /tmp/ffconf.iXGWyKi9/test.o/root/ndk/android-ndk-r10b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory/root/ndk/android-ndk-r10b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory/root/ndk/android-ndk-r10b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc/root/ndk/android-ndk-r10b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl/s/ndk-toolchain/src/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc:289: error: undefined reference to 'abort'/s/ndk-toolchain/src/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc:346: error: undefined reference to 'memcpy'/s/ndk-toolchain/src/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc:376: error: undefined reference to 'memcpy'/s/ndk-toolchain/src/build/../gcc/gcc-4.9/libgcc/unwind-arm-common.inc:505: error: undefined reference to 'abort'/s/ndk-toolchain/src/build/../gcc/gcc-4.9/libgcc/config/arm/pr-support.c:378: error: undefined reference to 'abort'/s/ndk-toolchain/src/build/../gcc/gcc-4.9/libgcc/config/arm/pr-support.c:384: error: undefined reference to 'abort'collect2: error: ld returned 1 exit statusC compiler test failed.

编译成功后压缩编译文件,并拷贝到window

tar cvf ffmpeg.tar *    cd 到安装目录sz  ffmpeg.tar          拷贝到window下

更多相关文章

  1. Android Framework中添加AIDL文件编译
  2. Android布局文件layout.xml的一些属性值
  3. Android的xml文件中@、@android:type、@*、?、@+的含义和区别
  4. Android布局文件中常用的属性
  5. Android工具箱之文件目录
  6. Android环境变量配置
  7. android布局文件中各属性所代表的意义

随机推荐

  1. 面试java不知道Vector?恐怕要重在参与了
  2. 操作系统面试题汇总(找工作必备)
  3. 使用Android中sqlite表的全文检索
  4. Babel快速指南
  5. [Android]笔记10-单选按钮和复选框的功能
  6. Android在标准linux基础上对休眠唤醒的实
  7. ES2016
  8. Android(安卓)使用Post方式提交数据
  9. Android(安卓)如何建立AIDL
  10. 包装模式就是这么简单啦