注:參考自bilibili系列視頻,征服工具鏈-FFmpeg的編譯(Windows 篇),更詳細(xì)的內(nèi)容可以從視頻獲取https://www.bilibili.com/video/BV17i4y1G7WA
下載
官網(wǎng)下載msys2, ffmpeg,x264
Autoconf
Autoconf是M4宏處理器的擴(kuò)展包,用于生成自動(dòng)構(gòu)建源碼包的腳本。 適用于多種UNIX-like系統(tǒng)。可以使軟件包在所有的UNIX-like系統(tǒng)上進(jìn)行編譯。
注:M4 是一個(gè)宏處理器.將輸入拷貝到輸出,同時(shí)將宏展開. 宏可以是內(nèi)嵌的也可以是用戶定義的. 除了可以展開宏,m4還有一些內(nèi)建的函數(shù),用來引用文件,執(zhí)行Unix命令,整數(shù)運(yùn)算,文本操作,循環(huán)等. m4既可以作為編譯器的前端也可以單獨(dú)作為一個(gè)宏處理器.
ffmpeg、x264等歲數(shù)較大的軟件,都用Autoconf構(gòu)建。由于生成的腳本構(gòu)建源碼的腳本是在UNIX-like系統(tǒng)上進(jìn)行編譯的,我們?cè)趙indows上編譯軟件就會(huì)很困難,解決方法是,msys2,它可以在windows上模擬一個(gè)UNIX-like系統(tǒng)。
為了解決Autoconf的跨平臺(tái)缺陷,cmake誕生。
MSYS2
MSYS2 (Minimal SYStem 2)主要用于 shell 命令行開發(fā)環(huán)境。是集成了pacman(包管理工具)和Mingw-w64的Cygwin升級(jí)版(Cygwin是一個(gè)在windows平臺(tái)上運(yùn)行的類UNIX模擬環(huán)境), 提供了bash shell等linux環(huán)境、版本控制軟件(git/hg)和MinGW-w64 工具鏈。
MSYS2把UNIX-like系統(tǒng)函數(shù)轉(zhuǎn)換成 Windows 的 API ,從而實(shí)現(xiàn)在windows上執(zhí)行l(wèi)inux腳本。
安裝MSYS2之后,還需要在MSYS2里手動(dòng)安裝Mingw-w64
MinGw 和 cygwin
操作系統(tǒng)提供的系統(tǒng)API是不同的,如Windows使用CreateProcess()創(chuàng)建進(jìn)程,而Linux使用fork()。所以想要在Windows環(huán)境下使用Linux的編譯工具,也就是gcc/g++,我們需要一個(gè)中間的轉(zhuǎn)換工具或者平臺(tái),這也就是MinGW和cygwin存在的原因。
MinGW 是讓W(xué)indows 用戶可以用上GNU 工具,比如GCC,用于編譯。
Cygwin 提供完整的類Unix 環(huán)境,Windows 用戶不僅可以使用GNU 工具,理論上Linux 上的程序只要用Cygwin 重新編譯,就可以在Windows 上運(yùn)行。
即cygwin提供在windows平臺(tái)上運(yùn)行的類UNIX模擬環(huán)境,MinGw是在windows上使用gcc編譯器,提供編譯功能。
gcc的輸入是源文件,輸出是靜態(tài)庫/動(dòng)態(tài)庫/可執(zhí)行文件。
編譯x264 和 FFmpeg
編譯庫時(shí),如果有依賴,且依賴所在目錄既有動(dòng)態(tài)庫,又有靜態(tài)庫,他會(huì)優(yōu)先選擇動(dòng)態(tài)庫。靜態(tài)庫,代碼會(huì)嵌入被依賴庫;動(dòng)態(tài)庫,在最后運(yùn)行時(shí),需要把動(dòng)態(tài)庫放在運(yùn)行目錄用于引用。
代碼量小的習(xí)慣生成靜態(tài)庫,代碼量大的習(xí)慣生成動(dòng)態(tài)庫。
編譯腳本:
