FFMPEG編譯生成動態庫

爲什麼要用NDK編譯:
        對於開發Android的小夥伴,對於NDK肯定不會感到陌生。在Android世界裏聯通java和c代碼的利器jni就離不開NDK。作爲一名

合格的程序猿,在學習工作中肯定會有需要用到網絡上的各種開源庫,所以首先,我們需要能夠編譯出我們需要的動態庫。

       爲什麼要用NDK編譯呢?一般Linux系統默認都會有安裝gcc編譯器,使用gcc就可以編譯動態庫,但是編出來的庫在Android設備

上是用不了(以PC架構爲x86,移動設備架構爲arm爲例,大都數情況是這樣的),因爲架構不同,動態庫沒辦法通用。這個時候你

可以搭建arm交叉編譯環境,對於Android小夥伴建議使用NDK,它已經集成了arm交叉編譯環境,使用起來相對還是挺方便的。而且

使用jni時候的時候也少不了要用到它。


第一步:源代碼下載
        源碼可以去FFMPEG官網(https://ffmpeg.org)下載最新源代碼,怎麼下載以及需要下載哪個版本,在這裏就不贅述了。提醒

一下使用git下載的小夥伴,下面的git語句可能是下不下來的,坑已填,用http替換https試試!

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

第二步:去版本後綴
        到這裏,應該已經在Linux環境下載好了源碼了吧。                                                                                                                 

       FFMPEG默認編譯出來的庫後綴是有加版本號的,這種Android上似乎是加載不了哇!彆着急,稍微改改就成。將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)'

第三步:編譯
        磨刀不誤砍柴功,先寫個編譯腳本一勞永逸。vi build_android.sh
1 #!/bin/bash
  2 NDK=/home/Android/NDK/android-ndk-r13b
  3 SYSROOT=$NDK/platforms/android-23/arch-arm/
  4 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
  5 
  6 function build_one
  7 {
  8     ./configure \
  9         --prefix=$PREFIX \
 10         --enable-shared \
 11         --disable-static \
 12         --disable-doc \
 13         --disable-ffserver \
 14         --enable-cross-compile \
 15         --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
 16         --target-os=linux \
 17         --arch=arm \
 18         --sysroot=$SYSROOT \
 19         --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
 20         --extra-ldflags="$ADDI_LDFLAGS" \
 21         $ADDITIONAL_CONFIGURE_FLAG
 22 }
 23 CPU=arm
 24 PREFIX=$(pwd)/android/$CPU
 25 ADDI_CFLAGS="-marm"
 26 build_one
        NDK是機器上NDK代碼的路徑,需要換成對應的,SYSROOT和TOOLCHAIN如果目錄存在的話,可以不用修改。然後給腳本可執行權限, chmod +x build_android.sh。./build_android.sh執行生成Makefile。
        然後執行make -j8 && make install成功後,就會在指定的$PREFIX目錄下生成FFMPEG所有的動態庫了。

        在路上!
--------------------- 
作者:Jacky-G 
來源:CSDN 
原文:https://blog.csdn.net/u013007470/article/details/53792027 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

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