- ffmpeg的configure腳本里里已經有了對android ndk 編譯的支持了, 只需指定編譯器 prefix
- 使用llvm編譯,不需要修改 .c 源碼, 不會因為因為系統頭文件的 #define B0 00000 這個宏需要修改源文件中的 B0 變量;不需要修改udp.c文件中的 ip_mreq_source 這個struct定義引起的不兼容
使用llvm/clang編譯只需如下腳本:
- 增加編譯腳本 build_for_android.sh
1 #!/bin/bash 2 #設置臨時目錄,不是必須的,不設置的話,會自己在系統的temp目錄下生成一個, 設置的話,需要在ffmpeg的根目錄下創建一個ffmpegtemp文件夾 3 export TMPDIR=D:/FFMPEG/FFmpeg/ffmpegtemp 4 5 #設置ndk目錄 6 NDK=D:/android/sdk/ndk-bundle 7 8 #ar nm 的prefix 9 PLATFORM=arm-linux-androideabi 10 11 #llvm toolchain路徑 12 TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/windows-x86_64 13 14 #sysroot 這個一定要設置成 ndk的llvm 路徑下的 sysroot 15 SYSROOT=$TOOLCHAIN/sysroot 16 17 #ASM 路徑, 同上必須是llvm 目錄下的 asm 18 ASM=$SYSROOT/usr/include/$PLATFORM 19 20 #完整的 cross prefix 21 CROSS_PREFIX=$TOOLCHAIN/bin/$PLATFORM- 22 23 #專門給ndk clang/clang++ 的 cross prefix 24 ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/armv7a-linux-androideabi29- 25 26 function build_one 27 { 28 ./configure \ 29 --prefix=$PREFIX \ 30 --enable-shared \ 31 --disable-static \ 32 --disable-doc \ 33 --disable-ffmpeg \ 34 --disable-ffplay \ 35 --disable-ffprobe \ 36 --disable-avdevice \ 37 --disable-doc \ 38 --disable-symver \ 39 --cross-prefix=$CROSS_PREFIX \ 40 --cc=${ANDROID_CROSS_PREFIX}clang41 --target-os=android \ 42 --arch=arm \ 43 --enable-cross-compile \ 44 --sysroot=$SYSROOT \ 45 --extra-cflags="-I$ASM -isysroot $SYSROOT -Os -fpic" \ 46 47 $ADDITIONAL_CONFIGURE_FLAG 48 49 make clean 50 make -j4 51 make install 52 } 53 54 # arm v7vfp 55 CPU=armv7-a 56 OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU " 57 PREFIX=./android/$CPU-vfp 58 ADDITIONAL_CONFIGURE_FLAG= 59 build_one