ndk-R19C 編譯FFPMEG(LLVM/CLANG)

  1. ffmpeg的configure腳本里裏已經有了對android ndk 編譯的支持了, 只需指定編譯器 prefix
  2. 使用llvm編譯,不須要修改 .c 源碼, 不會由於由於系統頭文件的 #define B0 00000 這個宏須要修改源文件中的 B0 變量;不須要修改udp.c文件中的 ip_mreq_source 這個struct定義引發的不兼容

使用llvm/clang編譯只需以下腳本:linux

  • 增長編譯腳本 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
相關文章
相關標籤/搜索