編譯FFMPEG原始碼的指令碼編寫案例
依然以ffmpeg作為例子。
這篇將詳細說明如何自己編寫一個編譯ffmpeg的指令碼
首先解壓好ffmpeg.2.6.4以後,進入此檔案根目錄
編寫shell指令碼之前,要執行./configure --disable-yasm,主要目錄進行一系列的準備工作,比如說檢查gcc的版本,會生成config.mak等檔案(此命令只對ffmpeg有效)
./configure --help 此命令可以檢視有原始碼中有哪些可以被編譯,哪些可以選擇不被編譯,現在來看看常用引數的具體含義:
prefix:輸出路徑,就是生成了的動/靜態庫的存放路徑
arch:CPU的架構,有arm,mips.....
shared:動態庫 enable-shared表示生成動態庫
static:靜態庫 disable-static表示不生成靜態庫
PLATFORM:選擇編譯平臺 arm/mips/x86
cross-CROSS_COMPILE:交叉編譯 因為這是在linux環境下來編譯arm/mips/x86指令下的庫,所有必須指定用對應指令下的gcc來作為編譯器
TOOLCHAIN:工具鏈 依然跟編譯的指令有關,arm/mips/x86
------------------------------------------------------------乾貨區
也就是說,每一個C原始碼動態庫,對於android來講,理論上,都要編譯出三種動態庫,分別對應 arm/mips/x86 ,編譯出這三種庫,需要使用到的gcc是不一樣的,所以就要用上面的三個引數來指定,這裡以android-9為例,給出統一模板:
#arm
ARCH=arm
CPU=arm
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
PLATFORM=$ANDROID_NKD_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
build_ffmpeg
#x86
ARCH=x86
CPU=x86
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/x86-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/i686-linux-android-
PLATFORM=$ANDROID_NKD_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
build_ffmpeg
#mips
ARCH=mips
CPU=mips
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/mipsel-linux-android-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/mipsel-linux-android-
PLATFORM=$ANDROID_NKD_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
build_ffmpeg
最後的build_ffmpeg 是編譯方法。 就是說,先指定好了編譯器,再執行編譯方法。也就是說,以後編譯所有動態庫,都可以先把以上三段寫上,只要改最後的build_ffmpeg編譯方法就行了,下面給出 ffmpeg的完整編譯shell指令碼:
#!/bin/bash
#全域性變數,多個shell指令碼都可以使用
export ANDROID_NDK_HOME=/usr/ndk/android-ndk-r10e
export PLATFORM_VERSION=android-9
function build_ffmpeg
{
echo "start build ffmpeg $ARCH"
./configure --target-os=linux \
--prefix=$PREFIX \
--arch=$ARCH \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--enable-cross-compile \
--cross-prefix=$CROSS_COMPILE \
--sysroot=$PLATFORM \
--extra-cflags="-fpic"
make clean
make
make install
echo "build finished $ARCH"
}
此段中,申明瞭方法build_ffmpeg,裡面定義了輸出路徑,需要ffmpeg的哪些元件,不需要哪些元件,生成的是動態庫而非靜態庫,使用了交叉編譯並且指定了編譯工具。最終就會生成對應的指令的三種庫了!
原shell檔案位於930中。其中mips\x86指令為自己編寫,可能會有異常。
若arm也有異常,則參考912中的shell寫法
相關文章
- FFmpeg學習之一(FFmpeg原始碼編譯)原始碼編譯
- ffmpeg iOS平臺編譯 指令碼註釋iOS編譯指令碼
- gdb指令碼編寫指令碼
- Shell 指令碼編寫指令碼
- Sublime 編寫編譯 swift程式碼編譯Swift
- 油猴指令碼編寫指令碼
- 編寫git指令碼.shGit指令碼
- 寫Java這麼久,JDK原始碼編譯過沒?編譯JDK原始碼踩坑紀實JavaJDK原始碼編譯
- 原始碼包編譯安裝MySQL 5.6指令碼原始碼編譯MySql指令碼
- 29.FFmpeg+OpenGLES+OpenSLES播放器實現(三.FFmpeg配置和編譯指令碼)播放器編譯指令碼
- 編寫shell指令碼的規範指令碼
- 如何編寫高效的 Shell 指令碼指令碼
- 學習Ant編譯指令碼編譯指令碼
- 原始碼編譯Vim 8原始碼編譯
- MongoDB(0)- 原始碼編譯MongoDB原始碼編譯
- 編譯Android原始碼編譯Android原始碼
- 編譯hibernate原始碼編譯原始碼
- Docker編譯Azerothcore原始碼Docker編譯原始碼
- Spring原始碼編譯Spring原始碼編譯
- EA指令碼編寫要點指令碼
- 編寫執行R指令碼指令碼
- JavaCV FFmpeg AAC編碼Java
- 【FFmpeg】Windows下FFmpeg編譯Windows編譯
- 原始碼編譯安裝的原理原始碼編譯
- 原始碼的下載與編譯原始碼編譯
- 專案啟動指令碼的編寫指令碼
- WebRTC研究 (一) 編譯原始碼Web編譯原始碼
- 原始碼編譯 apache2.4原始碼編譯Apache
- Kubernetes原始碼編譯原始碼編譯
- Swift原始碼專案編譯Swift原始碼編譯
- 龍芯原始碼編譯MySQL原始碼編譯MySql
- Ceph原始碼編譯與打包原始碼編譯
- nvme driver 原始碼修改、編譯原始碼編譯
- 原始碼編譯安裝Redis原始碼編譯Redis
- LAMP原始碼編譯安裝LAMP原始碼編譯
- osg原始碼編譯步驟原始碼編譯
- Android原始碼編譯--整理Android原始碼編譯
- XCode 編譯 PAG 原始碼XCode編譯原始碼