編寫ffmpeg編譯指令碼:
ffmpeg-build.sh
#!/bin/bash
source=
"ffmpeg-3.4"
#2、其次:定義".h/.m/.c"檔案編譯的結果目錄
#目錄作用:用於儲存.h/.m/.c檔案編譯後的結果.o檔案
cache=
"cache"
#3、定義".a"靜態庫儲存目錄
#pwd命令:表示獲取當前目錄
staticdir=
`pwd
`/"laimin-ffmpeg-ios"
#4、新增ffmpeg配置選項->預設配置
#toolchain options:工具鏈選項(指定我麼需要編譯平台cpu架構型別,例如:arm64、x86等等…)
# --enable-cross-compile: 交叉編譯
#developer options:開發者選項
# --disable-debug: 禁止使用除錯模式
#program options選項
# --disable-programs:禁用程式(不允許建立命令列程式)
#documentation options:文件選項
# --disable-doc:不需要編譯文件
#toolchain options:工具鏈選項
# --enable-pic:允許建立與位置無關**
configure_flags=
"--enable-cross-compile --disable-debug --disable-programs --disable-doc --enable-pic"
#5、定義預設cpu平台架構型別
#arm64 armv7->真機->cpu架構型別
#x86_64 i386->模擬器->cpu架構型別
archs=
"arm64 armv7 x86_64 i386"
#6、指定我們的這個庫編譯系統版本->ios系統下的7.0以及以上版本使用這個靜態庫
targetversion=
"7.0"
#7、接受命令後輸入引數(執行此指令碼可以不傳引數,直接試用上面的 archs,也可以使用引數執行此指令碼編譯指定的架構型別)
#我是動態接受命令行輸入cpu平台架構型別(輸入引數:編譯指定的cpu庫)if[
"$*"
]then
#存在輸入引數,也就說:外部指定需要編譯cpu架構型別
archs=
"$*"
fi#8、安裝彙編器->yasm
#判斷一下是否存在這個彙編器
#乙個命令就能夠幫助我們完成所有的操作
#錯誤一:`which` yasm
#正確一:`which yasm`if[
!`which yasm`
]then
#homebrew:軟體管理器
#錯誤二:`which` brew
#正確二:`which brew`
#exit 1->安裝失敗了,那麼退出程式if[
!`which brew`
]then
echo
"安裝brew"
ruby -e "$(
curl -fssl "||
exit 1
fiecho
"安裝yasm"
#成功了
#exit 1->安裝失敗了,那麼退出程式
brew install yasm ||
exit 1
fiecho
"正在迴圈編譯不同架構的靜態庫"
#9、for迴圈編譯ffmpeg靜態庫
currentdir=
`pwd
`for arch in
$archs
doecho
"開始編譯"
#9.1、建立目錄
#在編譯結果目錄下-建立對應的平台架構型別
mkdir -p "$cache/$arch"
#9.2、進入這個目錄
cd"$cache/$arch"
#9.3、配置編譯cpu架構型別->指定當前編譯cpu架構型別
#錯誤三:"--arch $arch"
#正確三:"-arch $arch"
archflags=
"-arch $arch"
#9.4、判定一下你到底是編譯的是模擬器.a靜態庫,還是真機.a靜態庫if[
"$arch"
="i386" -o "$arch"
="x86_64"
]then
#模擬器
platform=
"iphonesimulator"
#支援最小系統版本->ios系統
archflags=
"$archflags -mios-simulator-version-min=$targetversion"
else
#真機(mac、ios都支援)
platform=
"iphoneos"
#支援最小系統版本->ios系統
archflags=
"$archflags -mios-version-min=$targetversion -fembed-bitcode"
#注意:優化處理(可有可無)
#如果架構型別是"arm64",那麼if[
"$arch"
="arm64"
]then
#gnu彙編器(gnu assembler),簡稱為gas
#gaspp->彙編器預處理程式
#解決問題:分段錯誤
#通俗一點:就是程式執行時,變數訪問越界一類的問題
export=
"gaspp_fix_xcode5=1"
fifi
#10、正式編譯
#tr命令可以對來自標準輸入的字元進行替換、壓縮和刪除
#'[:upper:]'->將小寫轉成大寫
#'[:lower:]'->將大寫轉成小寫
#將platform->轉成大寫或者小寫
xcrun_sdk=
`echo $platform |
tr'[:upper:]'
'[:lower:]'
` #編譯器->編譯平台
cc="xcrun -sdk $xcrun_sdk clang"
#架構型別->arm64if[
"$arch"
="arm64"
]then
#preprocessor.pl幫助我們編譯ffmpeg->arm64位靜態庫
as="gas-preprocessor.pl -arch aarch64 -- $cc"
else
#預設編譯平台
as="$cc"
fiecho
"執行到了1"
#目錄找到ffmepg編譯源**目錄->設定編譯配置->編譯ffmpeg原始碼
#--target-os:目標系統->darwin(mac系統早起版本名字)
#darwin:是mac系統、ios系統祖宗
#--arch:cpu平台架構型別
#--cc:指定編譯器型別選項
#--as:匯程式設計序
#$configure_flags最初配置
#--extra-cflags
#--prefix:靜態庫輸出目錄
tmpdir=
$$currentdir/$source/configure \
--target-os=darwin \
--arch=
$arch \
--cc=
"$cc" \
--as=
"$as" \
$configure_flags \
--extra-cflags=
"$archflags" \
--extra-ldflags=
"$archflags" \
--prefix=
"$staticdir/$arch" \
||exit 1
echo
"執行了"
#解決問題->分段錯誤問題
#安裝->匯出靜態庫(編譯.a靜態庫)
#執行命令
make -j3 install
$export
||exit 1
#回到了我們的指令碼檔案目錄
cd$currentdir
done
ffmpeg shell指令碼編寫
一 執行.configure disable yasm命令 編譯ffmpeg,編寫shell指令碼之前,要執行.configure disable yasm命令。執行這些命令的主要目的是進行一系列的準備工作,比如說檢查gcc的版本,會生成common.mak等檔案 1 解壓ffmpeg壓縮包 unz...
UDK 指令碼編譯執行
udk基礎學習 1.首先想通過簡單的直接在d udk udk 2012 03 development src utgame classes加入乙個指令碼,實現superjump功能,就是玩家在按跳躍鍵的時候可以高高跳起。我想從解決問題的先後順尋討論下本次udk的學習 a 加入debuggerinte...
mtk modem快速編譯指令碼
公司的modem 一直由驅動維護,分為新編譯方式和傳統編譯方式兩種方法,在編譯時需要手動查詢需要編譯的modem是在新編譯方式的指令碼裡,還是傳統編譯方式的指令碼裡,然後再覆蓋不同編譯指令碼,再執行編譯 整個查詢過程耗時且繁瑣,故重寫編譯指令碼執行快速編譯。明確需求 1.簡化傳統modem查詢編譯過...