c++開發環境構建(一)——編譯器選擇

      網友投稿 1114 2022-05-29

      編譯(器)環境說明

      注以下部分內容摘錄自Cygwin 和MinGW 的區別與聯系是怎樣的?

      g++ 安裝方法

      https://blog.csdn.net/sigmarising/article/details/107290016

      注如網絡受限,參考如下方法離線安裝

      https://blog.csdn.net/kramer_1711/article/details/119416512

      GCC

      GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發的編程語言編譯器。它是以GPL許可證所發行的自由軟件,也是 GNU計劃的關鍵部分。GCC原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如Linux、BSD、Mac OS X等)采納為標準的編譯器,GCC同樣適用于微軟的Windows。 GCC是自由軟件過程發展中的著名例子,由自由軟件基金會以GPL協議發布。

      GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。后來又擴展能夠支持更多編程語言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各類處理器架構上的匯編語言等,所以改名GNU編譯器套件(GNU Compiler Collection)。

      G++

      g++是GNU開發的C++編譯器,是GCC(GNU Compiler Collection)GNU編譯器套件的組成部分。另外,gcc是GNU的C編譯器。

      g++入門教程

      對于 *.c和*.cpp文件,gcc分別當做c和cpp文件編譯(c和cpp的語法強度是不一樣的)

      對于 *.c和*.cpp文件,g++則統一當做cpp文件編譯

      使用g++編譯文件時,g++會自動鏈接標準庫STL,而gcc不會自動鏈接STL

      gcc在編譯C文件時,可使用的預定義宏是比較少的

      gcc在編譯cpp文件時/g++在編譯c文件和cpp文件時(這時候gcc和g++調用的都是cpp文件的編譯器),會加入一些額外的宏。

      在用gcc編譯c++文件時,為了能夠使用STL,需要加參數–lstdc++ ,但這并不代表 gcc –lstdc++ 和 g++是等價的。

      Cygwin

      原 Cygnus 出品(已被紅帽收購),目前是 RedHat 名下的項目。項目的目的是提供運行于 Windows 平臺的類 Unix 環境(以 GNU 工具為代表),為了達到這個目的,Cygwin 提供了一套抽象層 dll,用于將部分 Posix 調用轉換成 Windows 的 API 調用,實現相關功能。這里面最典型的,最基本的模擬層就是那個cygwin1.dll。除此之外,隨著 Linux 系統的發展壯大,目前的 Cygwin 已經不僅僅提供 POSIX 兼容,因此也順帶多了更多模擬層的依賴關系。

      Cygwin 的目錄結構基本照搬了 linux 的樣子,但同時,也兼容了 Windows 的許多功能:大部分應用使用 Unix 風格的路徑,Windows的盤符通過類似掛載點的方式提供給 Cygwin 使用;Cygwin 中既可以運行 Cygwin 的應用(依賴模擬層),又可以運行 Windows 應用,而傳遞給應用的路徑會經過它的模擬層變換,以此保證程序運行不會出錯。

      由于它的模擬層實現了相當良好的 Posix 兼容,人們試著將許多重要的 Linux/BSD 應用移植到了Cygwin下,使得Cygwin越來越大,功能也越來越豐富,以至于目前很多人直接把將Linux應用移植到Windows平臺的任務都交給了Cygwin(當然,這種移植并非原生)。事實上,Cygwin誕生之初,本就是想通過GCC編譯出Windows應用來,因為bootstrap GCC而順帶搞了一坨別的東西過來,最后發展到現在的。

      小結:Cygwin是運行于Windows平臺的POSIX“子系統”,提供Windows下的類Unix環境,并提供將部分 Linux 應用“移植”到Windows平臺的開發環境的一套軟件。按照我經常開玩笑的話來講,Cygwin 基本上就是傳說中的 GNU/NT 系統(對照 GNU/Linux,GNU/BSD,GNU/HURD)。

      MinGW

      全稱Minimalist GNU for Windows,用于開發原生(32位) Windows 應用的開發環境。它主要提供了針對 win32 應用的 GCC、GNU binutils 等工具,以及對等于 Windows SDK(的子集)的頭文件和用于 MinGW 版本 linker 的庫文件(so、a等,而不是 VC 的 lib)。

      MinGW 能夠替代 cl 用于編譯不包含 MFC 的、以 WinSDK 為主的 Windows 應用,并且編譯出來的應用不依賴于第三方的模擬層支持,其運行時為大部分 Windows 標配的 msvcrt(故稱原生 Windows 應用)。除此之外,MinGW 也支持 GCC 支持的其他語言。

      因為這些原因,MinGW 被許多 Linux 上發展起來的開發工具選擇為 Windows 版本的默認編譯器,例如 CodeBlocks,例如 DevC++。

      小結,MinGW 是用于進行 Windows 應用開發的 GNU 工具鏈(開發環境),它的編譯產物一般是原生 Windows 應用,雖然它本身不一定非要運行在 Windows 系統下(是的 MinGW 工具鏈也存在于 Linux、BSD 甚至 Cygwin 下)。

      MinGW-w64

      c++開發環境構建(一)——編譯器選擇

      上面提到的 MinGW,是針對 32 位 Windows 應用開發的。而且由于版本問題,不能很好的支持較新的 Windows API。MinGW-W64 則是新一代的 MinGW,支持更多的 API,支持 64 位應用開發,甚至支持 32 位 host 編譯 64 位應用以及反過來的“交叉”編譯。除此之外,它本身也有 32 位和 64 位不同版本,其它與 MinGW 相同。

      MSYS

      MSYS,由于 MinGW 本身僅代表工具鏈,而在 Windows 下,由于那個shi一樣的cmd,以及配套的命令行工具不夠齊全(也不舒服),因此,MinGW 開發者從曾經比較舊的 Cygwin 創建了一個分支,也用于提供類 Unix 環境。但與 Cygwin 的大而全不同,MSYS 是沖著小巧玲瓏的目標去的,所以整套 MSYS 以及 MinGW,主要以基本的 Linux 工具為主,大小在 200M 左右,并且沒有多少擴展能力。

      MSYS 是用于輔助 Windows 版 MinGW 進行命令行開發的配套軟件包,提供了部分 Unix 工具以使得 MinGW 的工具使用起來方便一些。如果不喜歡龐大的 Cygwin,而且使用不多,可以試試。不過喜歡完整體驗、不在乎磁盤占用等等,還是推薦 Cygwin 而不是 MSYS。

      MSYS2

      由于 MinGW 萬年不更新,MSYS 更是,Cygwin的許多新功能 MSYS 沒有同步過來,于是 Alex 等人建立了新一代的 MSYS 項目。仍然是 fork 了 Cygwin(較新版),但有個更優秀的包管理器 pacman,有活躍的開發者跟用戶組,有大量預編譯的軟件包(雖然肯定沒有Cygwin多)……對于不喜歡龐大的 Cygwin 的用戶而言,推薦試試 msys2。

      總結:

      Cygwin: 功能強大的linux環境,由于有cygwin1.dll實現了底層的windows api到linux api的轉化。所以在Cygwin里開發就相當于在linux上開發,對于開發人員來說就相當于調用linux類型的api,所以這樣開發的程序也可以直接移植到linux上。但是如果這樣的程序要在windows上執行的話,運行時必須要cygwin1.dll支持。

      MinGW: 是用于開發 Windows 應用的開發環境,是windows版本的gcc集合,不需要依賴中間層。

      MSYS: 是小型的linux的環境的模擬,可以與MinGW結合來模擬linux環境下使用MinGW的gcc。

      參考資料:

      Cygwin 和MinGW 的區別與聯系是怎樣的?

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何利用OpenCV尋找輪廓的中心?
      下一篇:如何使用三種方法將webm視頻格式轉換成mp4格式
      相關文章
      亚洲系列国产精品制服丝袜第| 亚洲AV无码乱码国产麻豆| 亚洲天堂在线播放| 亚洲αv久久久噜噜噜噜噜| 自拍偷自拍亚洲精品被多人伦好爽| 国产精品亚洲专区在线播放| 亚洲AV永久无码精品网站在线观看| 亚洲最大天堂无码精品区| 亚洲高清有码中文字| 亚洲欧洲日韩国产一区二区三区| 亚洲jizzjizz在线播放久| 亚洲1234区乱码| 亚洲国产亚洲综合在线尤物| 亚洲卡一卡2卡三卡4麻豆| 亚洲欧洲国产经精品香蕉网| 亚洲午夜电影一区二区三区| 亚洲成a人片在线看| 亚洲中文字幕久久精品无码A | 亚洲日本VA午夜在线影院| 亚洲日韩中文字幕一区| 亚洲精品无码专区| 亚洲A丁香五香天堂网| 亚洲精品A在线观看| 在线观看亚洲精品国产| 亚洲国产精品高清久久久| 亚洲成人精品久久| 亚洲女人初试黑人巨高清| 亚洲精品123区在线观看| 亚洲欧美国产欧美色欲| 国产区图片区小说区亚洲区| 亚洲国产精品综合久久一线| 中文字幕不卡亚洲| 亚洲v高清理论电影| 亚洲综合一区二区精品久久| 中文字幕无码精品亚洲资源网久久| 亚洲精品无码中文久久字幕| 亚洲精品线路一在线观看| 亚洲欧洲成人精品香蕉网| 亚洲av丰满熟妇在线播放| 亚洲成人一级电影| 亚洲女子高潮不断爆白浆|