爲什麼要用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
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!