Android NDK 編譯FFmpeg(不需要複雜的環境變量設置)

環境:

CentOS6.2——64

借鑑:https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk

在根目錄下創建work文件夾:cd  / && mkdir work

a) 先把要用到的安裝包下載到本地:

  FFmpeggit clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

Android NDK(我下載的版本是r8b-linux-x86_64)http://developer.android.com/tools/sdk/ndk/index.html

一定要看好下載對應本地系統的軟件包版本。

創建好的目錄結構是:work/ffmpeg    work/android-ndk-r8b

b)配置環境變量:(可以省略)

export ANDROID_NDK_HOME=/work/android-ndk-r8b

export PATH=$ANDROID_NDK_HOME:$PATH

c) 進入ffmpeg目錄,創建config.sh文件,並將下面的文字部分寫入文件:

  export ANDROID_NDK=/work/android-ndk-r8b                                                                                                   
  export TOOLCHAIN=/work/tmp/ffmpeg
  export SYSROOT=$TOOLCHAIN/sysroot/
  $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=$TOOLCHAIN
  
  export PATH=$TOOLCHAIN/bin:$PATH
  export CC=arm-linux-androideabi-gcc
  export LD=arm-linux-androideabi-ld
  export AR=arm-linux-androideabi-ar
  
  CFLAGS="-O3 -Wall -mthumb -pipe -fpic -fasm \                                                                                                
          -finline-limit=300 -ffast-math \
          -fstrict-aliasing -Werror=strict-aliasing \
          -fmodulo-sched -fmodulo-sched-allow-regmoves \
          -Wno-psabi -Wa,--noexecstack \
          -D__ARM_ARCH_5__ -D__ARM_ARCH_5E__ \
          -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__ \
          -DANDROID -DNDEBUG"
  
  EXTRA_CFLAGS="-march=armv7-a -mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad"
  EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"
  
  FFMPEG_FLAGS="--prefix=/tmp/ffmpeg/build \
                        --target-os=linux \
                        --arch=arm \
                        --enable-cross-compile \
                        --cc=arm-linux-androideabi-gcc \
                        --cross-prefix=arm-linux-androideabi- \
                        --enable-shared \
                        --disable-symver \
                        --disable-doc \
                        --disable-ffplay \
                        --disable-ffmpeg \
                        --disable-ffprobe \
                        --disable-ffserver \
                        --disable-avdevice \
                        --disable-avfilter \
                        --disable-encoders  \
                        --disable-muxers \
   					  --disable-filters \
                        --disable-devices \
                        --disable-everything \
                        --enable-protocols  \
                        --enable-parsers \
                        --enable-demuxers \
                        --disable-demuxer=sbg \
                        --enable-decoder=h264 \
                        --enable-bsfs \
                        --enable-network \
                        --enable-swscale  \
                        --enable-asm \
                        --enable-version3"
  ./configure $FFMPEG_FLAGS --extra-cflags="$CFLAGS $EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS"
  make clean
  make -j4
    make install           

當然,configure的參數可以根據自己的需要指定。

d) 執行文件:

./config.sh

這時候可能就會出現各種各樣的問題了,不要慌,看看config.log文件,這時候如果有類似

arm-linux-androideabi-gcc is unable to create an executable file.
C compiler test failed.

什麼編譯器不能創建可執行文件,C編譯器找不到什麼的,這多數情況下是你指定的NDK路徑有問題,再就是NDK的版本問題,不是對應你係統的開發包,我的是Linuxx86_64版本的。

/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 

這種問題,這時候就要藉助google大神了,萬能的google,程序員的福音,好像是缺少什麼庫依賴,沒關係,執行

 yum install alibc.i686

問題似乎可以解決了,接下來繼續執行

./config.sh

又報出錯誤:

/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/as: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

一大堆,不過不要緊,有萬能的google在,好像是缺少了zlib,好,跟前面一樣執行

yum install zlib.i686

可能會提示安裝失敗什麼的,這時候就要去官網下載最新版本的zlib了:http://zlib.net/

下載後解壓,進入目錄後依次執行

./configure

make

make install

這時候問題看似都解決了,不過我的機器報出錯了,lib文件安錯位置了,configure默認安裝到了/usr/local/lib裏,沒關係,這時候設置一個軟鏈接就好了:

mv ./lib/libz.so.1 ./lib/libz.so.1_backup

ln -s /usr/local/lib/libz.so.1 ./lib/libz.so.1

再次進入ffmpeg目錄執行:

./config.sh

如果問題沒有解決,提示mysql什麼的,告訴你一個狠招

yum install mysql-embedded.i686

^ o ^

      這下沒問題了,執行

./config.sh

……………………………………………………

…………………………………………………………………………

…………………………………………………………………………………………

………………………………………………………………………………

…………………………

漫長的編譯過程……

最終大功告成,進入/tmp/ffmpeg/build裏就看到了你想得到的頭文件和庫文件,而對應的ffmpeg所有的lib文件夾下也生成了對應的.so文件。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章