Windows編譯環境搭建(MSYS2\MinGW\cmake)

我的音視頻/流媒體開源項目(github)

一、基礎環境搭建

1.1 MSYS2\MinGW

參考:1. 基于MSYS2的Mingw-w64 GCC搭建Windows下C++開發環境_msys2使用mingw64編譯

????????在Widndows系統上,使用gcc工具鏈(g++)進行C++程序開發?可以的!本文將就如何搭建這樣一個環境,展開介紹。

  • Windows下C/C++程序開發的差勁開發體驗:

? ? ? ? 1、首先需要安裝≈20 GB的Visual Studio(大型團隊項目,還是需要VS的);
? ? ? ? 2、然后,很多第三方庫,需要自己去GitHub或者相應的官網上下載源碼,然后進行編譯,而編譯過程會遇到各種版本不兼容、缺少依賴、代碼錯誤、需修改makefile文件等問題……至此庫尚未編譯成功,開發人員早已經被這差勁的體驗勸退……

  • MSYS2有三個優點:

? ? ? ? 1、仿Linux的終端交互環境,可以使用Linux下的終端命令和快捷方式;

? ? ? ? 2、自帶pacman軟件管理包,讓您將精力放到C++代碼的編寫上,而不是復雜的依賴環境的搭建和編譯。如:GDAL、OpenCV等第三方C/C++庫,無須再去踩各種坑、艱難地編譯而是直接一個命令就安裝到了本地;

? ? ? ? 3、復用自己在Linux下的開發經驗。使用g++進行庫的鏈接、源碼編譯等操作,可更進一步了解C++代碼的編譯過程。

????????下載MSYS2

????????https://www.msys2.org/,進入MSYS2的官網,然后找到如下圖下載鏈接,點擊即可進行下載。

????????安裝MSYS2

????????如下圖,MSYS2的整個安裝過程無須特別的設置,一路默認下一步即可,安裝位置建議不要用C盤,因為后續使用pacman安裝軟件很占用空間,我是用了D盤。

????????配置pacman鏡像源

  • pacman是隨MSYS2一起安裝的軟件包管理工具
  • 安裝完成MSYS2后,則可以在如下路徑找到鏡像配置文件:D:\msys64\etc\pacman.d,格式為mirrorlist.*,然后進行配置,配置前后的結果如下面兩幅圖所示。這里說的配置,其實就是將配置文件內的兩個國內的鏡像源“tsinghua(清華)”和“ustc(中科大)”,移動(剪切粘貼)到主鏡像(## Primary標識的msys2)的前面。

????????更新pacman基本軟件倉庫

????????配置完鏡像源后,需要更新pacman的基本軟件倉庫,這分兩個步驟:

????????第一步,執行如下命令,檢查更新并下載,過程中,MSYS2可能會因為安裝更新而自動關閉,此時,可再次在開始菜單中打開,然后再次執行“pacman -Syu”命令。

pacman -Syu

????????第二步,確定“pacman -Syu”命令的更新完畢,如下圖,則說明更新完畢,然后執行如下命令,以更新因執行上已更新操作,而未更新的剩余程序。

pacman -Su

????????安裝Mingw-w64 GCC編譯工具鏈
????????Mingw-w64是Windows編譯C/C++源代碼的程序集,為了安裝該軟件,須執行如下命令,即可安裝編譯C/C++程序所需的編譯工具如:gcc、g++、make等。此步驟安裝的軟件包較多,因此可能需要一定時間,取決于網絡和電腦配置,約需3-5分鐘。

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

????????把D:\msys64\mingw64\bin(替換成實際路徑)加入到環境變量中,就可以在任何位置使用gcc、g++、gdb以及mingw32-make等工具了,在cmd中和VSCode終端都可以,個人覺得使用msys2生成的MinGW64程序反而不方便。添加完環境變量之后在cmd下,輸出gcc --version 和mingw32-make --version驗證。如果不添加環境變量,就只能調用D:\msys64\mingw64.exe使用gcc/g++等工具,很不方便,我基本都是在VSCode中寫代碼并編譯。

????????自此就可以使用VSCode,甚至記事本寫C/C++程序,并使用gcc/g++編譯了。注意編譯出來的程序就是.exe結尾的(動態庫是.dll和.dll.a結尾的,.lib是給MSVC編譯器用的,也就是Visual Studio。MinGW使用的是.dll.a+.dll;MSVC是.lib+.dll,兩者是不一樣的),這里的MinGW只是模擬在Linux下的編譯過程,但是生成程序或者動態庫等還是Windows風格的。

? ? ? ? 注意:盡量不要再VSCode終端里面執行程序,因為CMD和VSCode的程序運行起來表現不一樣,尤其是在多線程環境下,編譯在CMD和VSCode終端下都是可以的。

? ? ? ? 當然,MinGW也可以不通過msys2安裝,直接在電腦上安裝MinGW也是可以的,但是因為在開發過程中,肯定還會用到其他的庫和軟件,如果每個都單獨安裝很麻煩,通過msys2就可以像Linux那樣,直接在線使用命令安裝,然后再加入Windows的環境變量中就可以了。此外如果涉及到要源碼編譯開源庫,使用msys2也很方便,msys2簡化了windows的軟件安裝和開源庫源碼編譯過程,不用msys2也是可以的,只不過不方便。

二、cmake

????????再安裝一個cmake,就可以實現大型項目的構建了,而且跨平臺(cmake不用msys2安裝,單獨安裝即可,同樣要加入到環境變量,在任何位置都可以使用)。

? ? ? ? 參考:Windows下CMake的下載與安裝詳解_cmake下載-CSDN博客

????????CMake的下載與安裝

????????CMake下載鏈接:https://cmake.org/download/。
????????下載最新穩定版即可(Latest Release):

????????下載完成后,單擊“Next”按鈕,在下圖中勾選“I accept the terms in the License Agreement”復選框接受許可協議:

????????選中“Add CMake to the system PATH for all users”單選按鈕添加系統路徑變量。也可以同時勾選“CreateCMakeDesktopIcon”復選框,以便在安裝完成后在桌面上創建CMake的快捷方式圖標。

????????點擊Install進行安裝,在CMD下使用cmake --version進行驗證。

????????自此就可以使用cmake和MinGW構建項目了,構建過程和Linux略有區別,不過cmake和gcc/g++語法都是一樣的,步驟如下:

mkdir build
cd build
cmake -G "MinGW Makefiles" ..
mingw32-make

? ? ? ? 至此,就在Windows上搭建好了代碼編譯環境,我使用的是VSCode + MinGW + Cmake,如下圖所示。

三、編譯FFmpeg

????????在Windwos使用ffmpeg有兩種方式:

????????1、在ffmpeg官網下載Windows上編譯好的庫,MinGW和MSCV都可以使用,因為.lib和.dll.a都有(為什么我不說.dll,因為無論是MinGW還是MSCV都需要.dll,.dll是exe程序運行必須有的,除非是靜態鏈接。)

? ? ? ? 2、源碼編譯,因為ffmpeg官方編譯好的庫很多功能都沒有用,比如,沒有fdk-aac,如果要用fdk-aac就只能自己源碼編譯,此外有的軟件,例如opencv只提供了.lib和.dll,沒有.dll.a,要想在MinGW中使用,就必須源碼編譯(opencv編譯坑很多,我是直接從網上下載編譯好的,這一點和Linux不同,Linux上一臺機器上編譯出來的庫很難在另外一臺Linux上使用,除非環境及版本高度相似)。在msys2上和Linux上編譯ffmpeg很相似。

? ? ? ? 依賴安裝:

????????需求,在ffmpeg中添加libx264、libx265、libfdk-aac

????????首先用msys2搜索一下x264,使用命令:

 pacman -Ss x264

????????我是mingw64,所以安裝mingw-w64-x86_64-libx264,命令為:

 pacman -S mingw-w64-x86_64-libx264

????????使用命令查看libx264的安裝位置,命令為:

pacman -Ql mingw-w64-x86_64-libx264

????????在msys的安裝路徑下就可以找到這些庫,知道庫和頭文件的位置,后面就可以用了。

? ? ? ? 用同樣的方式安裝libx265和fdk-aac,命令為:

pacman -S mingw-w64-x86_64-x265 #mingw-w64-x86_64-x265包含了x265可執行程序,之前安裝的mingw-w64-x86_64-libx264不包含x264可執行程序,如果安裝libx264的時候想包含x264.exe也可以安裝mingw-w64-x86_64-x264,我們只用x264和x265的庫,有沒有exe都可以,我們不用
pacman -S mingw-w64-x86_64-fdk-aac

? ? ? ?安裝匯編庫

pacman -S mingw-w64-x86_64-yasm mingw-w64-x86_64-nasm

????????ffmpeg源碼下載:

? ? ? ? 下載地址:https://ffmpeg.org/releases/

????????我下載的是4.4.5

????????此時我們打開minw64,用來編譯ffmpeg源碼。

????????查看當前所在目錄

????????當前所在目錄為/home/sunkx1,在Windows上的實際路徑就為D:\msys64\home\sunkx1,把下載的ffmpeg源碼放到D:\msys64\home\sunkx1下面,ls看一下,就可以看到ffmpeg源碼了。

????????解壓:

tar -zxvf ffmpeg-4.4.5.tar.gz

? ? ? ? 進入到源碼目錄:

cd ffmpeg-4.4.5/

????????配置:

./configure --prefix=/home/sunkx1/ff-build --enable-libx264 --enable-libx265 --enable-gpl --disable-x86asm --enable-nonfree --enable-libfdk-aac  --enable-shared  --extra-cflags=-I/mingw64/include --extra-ldflags=-L/mingw64/lib

????????--prefix指定安裝目錄。

????????--enable-gpl:允許使用 GPL 許可證 的組件,比如 libx264 和 libx265,如果沒有這個選項,FFmpeg 會拒絕編譯 libx264。
????????--enable-nonfree:啟用一些 非自由組件,不啟用,libfdk-aac 就無法使用。

????????--disable-x86asm:禁用 x86 匯編優化(主要影響 H.264/HEVC 編碼性能)。

????????--enable-shared:啟用共享庫(動態庫 .dll 或 .so)。

????????--extra-cflags和--extra-ldflags指定libx264、libx265、libfdk-aac的安裝路徑。

? ? ? ? 編譯安裝:

make -j
make install

????????把如下路徑添加到環境變量

D:\msys64\mingw64\bin
D:\msys64\home\sunkx1\ff-build\bin

????????第一個是x264、x265、fdk-aac的庫所在位置(.dll)

????????第二個是ffmpeg庫所在位置(.dll和exe)

? ? ? ? 配置好之后就可以在cmd中使用ffmpeg了,

? ? ? ? 在cmake中配置,就可以使用ffmpeg了

? ? ? ? 1、頭文件位置

D:\msys64\mingw64\include
D:\msys64\home\sunkx1\ff-build\include

? ? ? ? 2、鏈接庫位置

D:\msys64\mingw64\lib
D:\msys64\home\sunkx1\ff-build\lib

????????上面編譯出來的ffmpeg不包含ffplay,因為ffplay依賴sdl,所以需要安裝sdl才可以,同樣使用pacman安裝即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72875.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72875.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72875.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TikTok美國戰略升級:聚焦美食旅行,本地化服務如何重塑市場格局

平臺深耕本土內容生態,餐飲旅游創作者迎流量紅利,算法推薦機制激發地域經濟新活力 過去一年,TikTok在美國市場的動作頻頻引發行業關注。從早期以娛樂、舞蹈為主的全球化內容,到如今將資源向美食、旅行兩大垂類傾斜,這…

Unity Dots環境配置

文章目錄 前言環境配置1.新建Unity 工程2.安裝Entities包2.安裝EntitiesGraphics包3.安裝URP渲染管線 Dots窗口 前言 DOTS(Data-Oriented Technology Stack)是Unity推出的一種用于開發高性能游戲和應用的數據導向技術棧,包含三大核心組件&am…

manus對比ChatGPT-Deep reaserch進行研究類學術相關數據分析!誰更勝一籌?

沒有賬號,只能挑選一個案例 一夜之間被這個用全英文介紹全華班出品的新爆款國產AI產品的小胖刷頻。白天還沒有切換語言的選項,晚上就加上了。簡單看了看團隊夠成,使用很長實踐的Monica創始人也在其中。逐漸可以理解,重心放在海外產…

Python項目-基于Django的在線教育平臺開發

1. 項目概述 在線教育平臺已成為現代教育的重要組成部分,特別是在后疫情時代,遠程學習的需求顯著增加。本文將詳細介紹如何使用Python的Django框架開發一個功能完善的在線教育平臺,包括系統設計、核心功能實現以及部署上線等關鍵環節。 本項…

【自學筆記】Numpy基礎知識點總覽-持續更新

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 Numpy基礎知識點總覽目錄1. 簡介Numpy是什么為什么使用Numpy 2. 數組對象(ndarray)創建數組數組的屬性數組的形狀操作 3. 數組的基本操作數組…

Kubernetes中的 iptables 規則介紹

#作者:鄧偉 文章目錄 一、Kubernetes 網絡模型概述二、iptables 基礎知識三、Kubernetes 中的 iptables 應用四、查看和調試 iptables 規則五、總結 在 Kubernetes 集群中,iptables 是一個核心組件, 用于實現服務發現和網絡策略。iptables 通…

.NET Core全屏截圖,C#全屏截圖

.NET Core全屏截圖,C#全屏截圖 使用框架: WPF.NET 8 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W…

Java直通車系列15【Spring MVC】(ModelAndView 使用)

目錄 1. ModelAndView 概述 2. ModelAndView 的主要屬性和方法 主要屬性 主要方法 3. 場景示例 示例 1:簡單的 ModelAndView 使用 示例 2:使用 ModelAndView 處理列表數據 示例 3:使用 ModelAndView 處理異常情況 1. ModelAndView 概…

視頻圖像刷新到HTTP的原理

上一篇博客已經說了cgi拿到了共享內存的程序還需要處理的才能夠真正刷新到網頁里面去 HTTP協議介紹 HTTP中文名稱是超文本傳輸協議,它是一個簡單的請求.響應協議,HTTP協議它運行在TCP上面,它是互聯網數據通信的基礎。 幾乎所有的網頁請求和互…

2024四川大學計算機考研復試上機真題

2024四川大學計算機考研復試上機真題 2024四川大學計算機考研復試機試真題 歷年四川大學計算機考研復試機試真題 在線評測:https://app2098.acapp.acwing.com.cn/ 分數求和 題目描述 有一分數序列: 2/1 3/2 5/3 8/5 13/8 21/13… 求出這個數列的前 …

Python評估網絡脆弱性

一、網絡安全 (1)網絡安全的定義 網絡安全是指計算機網絡系統中的硬件、數據、程序等不會因為無意或惡意的原因而遭到破壞、篡改、泄露,防止非授權的使用或訪問,系統能夠保持服務的連續性,以及能夠可靠的運行。網絡安…

Java后端高頻面經——Spring、SpringBoot、MyBatis

Spring定義一個Bean有哪些方法?依賴注入有哪些方法? (1)定義Bean的方法 注解定義Bean,Component 用于標記一個類作為Spring的bean。當一個類被Component注解標記時,Spring會將其實例化為一個bean&#xff0…

Qt 實現繪圖板(支持橡皮擦與 Ctrl+Z 撤銷功能)[特殊字符]

作業&#xff1a; 1&#xff1a;實現繪圖的時候&#xff0c;顏色的隨時調整 2&#xff1a;追加橡皮擦功能 3&#xff1a;配合鍵盤事件&#xff0c;實現功能 當鍵盤按 ctrlz的時候&#xff0c;撤銷最后一次繪圖 頭文件.h #ifndef WIDGET_H #define WIDGET_H#include <QWidge…

計算機網絡(1) 網絡通信基礎,協議介紹,通信框架

網絡結構模式 C/S-----客戶端和服務器 B/S -----瀏覽器服務器 MAC地址 每一個網卡都擁有獨一無二的48位串行號&#xff0c;也即MAC地址&#xff0c;也叫做物理地址、硬件地址或者是局域網地址 MAC地址表示為12個16進制數 如00-16-EA-AE-3C-40 &#xff08;每一個數可以用四個…

HOW - React 如何在在瀏覽器繪制之前同步執行 - useLayoutEffect

目錄 useEffect vs useLayoutEffectuseEffectuseLayoutEffect主要區別總結選擇建議注意事項 useLayoutEffect 使用示例測量 DOM 元素的尺寸和位置示例&#xff1a;自適應彈出框定位 同步更新樣式以避免閃爍示例&#xff1a;根據內容動態調整容器高度 圖像或 Canvas 繪制前的準備…

【無人機三維路徑規劃】基于CPO冠豪豬優化算法的無人機三維路徑規劃Maltab

代碼獲取基于CPO冠豪豬優化算法的無人機三維路徑規劃Maltab 基于CPO冠豪豬優化算法的無人機三維路徑規劃 一、CPO算法的基本原理與核心優勢 冠豪豬優化算法&#xff08;Crested Porcupine Optimizer, CPO&#xff09;是一種新型元啟發式算法&#xff0c;其靈感來源于冠豪豬的…

深度學習驅動的智能化革命:從技術突破到行業實踐

第一章 深度學習的技術演進與核心架構 1.1 從淺層網絡到深度學習的范式轉變 深度學習的核心在于通過多層次非線性變換自動提取數據特征,其發展歷程可劃分為三個階段:符號主義時代的規則驅動(1950s-1980s)、連接主義時代的淺層網絡(1990s-2000s)以及深度學習時代的端到端…

簡潔實用的3個免費wordpress主題

高端大氣動態炫酷的免費企業官網wordpress主題 非常簡潔的免費wordpress主題&#xff0c;安裝簡單、設置簡單&#xff0c;幾分鐘就可以搭建好一個wordpress網站。 經典風格的免費wordpress主題 免費下載 https://www.fuyefa.com/wordpress

RabbitMQ 高級特性解析:RabbitMQ 消息可靠性保障 (上)

RabbitMQ 核心功能 RabbitMQ 高級特性解析&#xff1a;RabbitMQ 消息可靠性保障 &#xff08;上&#xff09;-CSDN博客 RabbitMQ 高級特性&#xff1a;從 TTL 到消息分發的全面解析 &#xff08;下&#xff09;-CSDN博客 前言 最近再看 RabbitMQ&#xff0c;看了看自己之前寫…

用DeepSeek-R1-Distill-data-110k蒸餾中文數據集 微調Qwen2.5-7B-Instruct!

下載模型與數據 模型下載&#xff1a; huggingface&#xff1a; Qwen/Qwen2.5-7B-Instruct HF MirrorWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct 魔搭&a…