征服工具鏈-FFmpeg的編譯(Windows 篇)

注:參考自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)庫。

編譯腳本:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容