1、準(zhǔn)備工具
VS2015 :自己找吧(笑)
FFMPEG : http://ffmpeg.org/download.html#releases
MSYS2 : http://www.msys2.org/
2、設(shè)置編譯環(huán)境
安裝MSYS2:
打開(kāi)MSYS2,mingw32聊疲、mingw32分別對(duì)應(yīng)32位、64位的工具鏈寄纵,因?yàn)橛肰S編譯立美,這里我們不需要用到,照道理應(yīng)該用msys2就可以了隘竭,之后安裝3個(gè)軟件包:
# normal msys2 packages
pacman -S make pkgconf diffutils
安裝匯編編譯器Nasm或者Yasm:
# normal msys2 packages
pacman -S Nasm
之后關(guān)閉 msys2 終端塘秦,打開(kāi) cmd.exe 終端:
BAT腳本 msvc_cmd_x86.bat
:: msvc_cmd_x86.bat
@echo off
set VS_DIR="C:\Program Files (x86)\Microsoft Visual Studio 14.0"
cmd /k "%VS_DIR%\VC\vcvarsall.bat" x86
cmd.exe
BAT腳本 msvc_cmd_x64.bat
:: msvc_cmd_x64.bat
@echo off
set VS_DIR="C:\Program Files (x86)\Microsoft Visual Studio 14.0"
cmd /k "%VS_DIR%\VC\vcvarsall.bat" amd64
cmd.exe
上面是我為方便打開(kāi)終端的幾條命令,分別x86动看,amd64的bat腳本尊剔。
你可以手動(dòng)輸入vcvarsall.bat x86或者vcvarsall.bat amd64,VS_DIR變量是vs的目錄路徑菱皆。vcvarsall.bat主要是幫助設(shè)置編譯環(huán)境變量须误,在當(dāng)前終端vcvarsall.bat amd64就是設(shè)置了amd64的編譯環(huán)境,反之x86也一樣仇轻。(下面是按編譯amd64為例)
設(shè)置好后京痢,再在當(dāng)前終端打開(kāi)msys2,之后設(shè)置VC工具鏈命令位置篷店,在終端輸入:
$ export PATH="/C/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64":$PATH
選擇對(duì)應(yīng)的工具鏈:
x86 : /C/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin
amd64 :/C/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64
VS路徑要放在$PATH前面祭椰,有相同名字的命令,前面的會(huì)優(yōu)先使用船庇。跟著命令:
which link
看看是不是指向 /C/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64吭产。到這里環(huán)境已經(jīng)設(shè)置好了。
3鸭轮、編譯
For MSVC:
./configure --toolchain=msvc
make
make install
假如你是靜態(tài)編譯的話臣淤,庫(kù)會(huì)是.a結(jié)尾,這不影響使用窃爷,makefile里面定義好的邑蒋。
#pragma comment(lib,"libavdevice.a")
也可以,在cmd命令行打包成一個(gè)庫(kù)按厘,前提是已經(jīng)設(shè)置好VS工具鏈的環(huán)境医吊。
lib /out:ffmpeg_static.lib *.a
附件、
配置腳本
msys2終端命令:
x86:
動(dòng)態(tài)編譯 :$ sh msvc.h x86 shared
靜態(tài)編譯 :$ sh msvc.h x86 static
(不能同時(shí)動(dòng)態(tài)逮京、靜態(tài)編譯)
Make : $ sh msvc.h make_x86
x64:
動(dòng)態(tài)編譯 : $ sh msvc.h x64 shared
靜態(tài)編譯 : $ sh msvc.h x64 static
(不能同時(shí)動(dòng)態(tài)卿堂、靜態(tài)編譯)
Make : $ sh msvc.h make_x64
文件名: msvc.h
# 文件名: msvc.h
# normal msys2 packages
#pacman -S make pkgconf diffutils
pause(){
read -p "Press any key continue.\n" varpause
echo "continue..."
}
make_configure(){
CONFIG_ARGS="$1 --prefix=./ffmpeg-build-$2"
CONFIG_MSVC_EXFLAGS="--toolchain=msvc --extra-cflags=-utf-8"
case $3 in
shared)
echo "configure $CONFIG_MSVC_EXFLAGS $CONFIG_ARGS --enable-$3"
pause
sh configure $CONFIG_MSVC_EXFLAGS $CONFIG_ARGS --enable-shared
;;
static)
echo "configure $CONFIG_MSVC_EXFLAGS $CONFIG_ARGS --enable-$3"
pause
sh configure $CONFIG_MSVC_EXFLAGS $CONFIG_ARGS --enable-static
;;
*)
echo "configure $CONFIG_MSVC_EXFLAGS $CONFIG_ARGS"
pause
sh configure $CONFIG_MSVC_EXFLAGS $CONFIG_ARGS
;;
esac
return 0
}
case $1 in
x64)
export PATH="/C/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64":$PATH
make_configure "--arch=amd64 --disable-debug" $1 $2
;;
x86)
export PATH="/c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin":$PATH
make_configure "--arch=i386 --disable-debug" $1 $2
;;
x64_Debug)
export PATH="/C/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64":$PATH
make_configure --arch=amd64 $1 $2
;;
x86_Debug)
export PATH="/c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin":$PATH
make_configure --arch=i386 $1 $2
;;
make_x64)
export PATH="/C/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64":$PATH
echo "x64:$PATH"
make
;;
make_x86)
export PATH="/c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin":$PATH
echo "x86:$PATH"
make
;;
*)
;;
esac
注、腳本中的 “--extra-cflags=-utf-8” 是給VS的命令,這里是我事后加上的草描,防止utf-8編碼問(wèn)題览绿,如果編譯有問(wèn)題的話,請(qǐng)去掉穗慕。
可能發(fā)生的問(wèn)題
1饿敲、代碼頁(yè) 65001
編譯過(guò)程如果發(fā)生 "config.h warning : ***代碼頁(yè) 65001",之后可能中斷逛绵,這是由于vs用的utf-8帶bom怀各,而ffmpeg的utf-8不帶引起的問(wèn)題。你需要用notepad打開(kāi)config.h再轉(zhuǎn)換為帶bom的utf-8格式繼續(xù)make就可以术浪。上面的 “--extra-cflags=-utf-8” 就是因?yàn)檫@問(wèn)題加上的瓢对,但未測(cè)試過(guò),有問(wèn)題請(qǐng)刪除添吗。
【編輯于 2018.06.26】