編譯FFMPEG原始碼的指令碼編寫案例

weixin_33782386發表於2017-10-12

依然以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寫法

相關文章