欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

推薦幾款C/C++的編譯器、編譯環(huán)境(非常全面的比較)

 更新時間:2021年06月06日 09:03:01   投稿:mdxy-dxy  
這篇文章主要介紹了C/C++編譯器的一些易混淆概念,這里腳本之家小編特為大家分享一下,需要的朋友可以參考下

C/C++編譯器有哪些?

首先是如雷貫耳的這幾位仁兄,MSVC、GCC、Cygwin、MingW(Cygwin和MingW的英文發(fā)音),另外還有些小眾和新秀,像ICC(Intel C/C++ Compiler)、BCC(Borland C/C++ Compiler,快銷聲匿跡了)、RVCT(ARM的匯編/C/C++編譯器,內(nèi)置在ARM的IDE——RVDS中)、Pgi編譯器……其實有一大串,我們只要熟悉常用的最強大的幾款就可以了。

主流C/C++編譯器|編譯環(huán)境簡介

MSVC

MSVC是微軟Windows平臺Visual Studio自帶的C/C++編譯器。

優(yōu)點:對Windows平臺支持好,編譯快。

缺點:對C++的新標準支持得少。

GCC

GCC原名GNU C Compiler,后來逐漸支持更多的語言編譯(C++、Fortran、Pascal、Objective-C、Java、Ada、Go等),所以變成了GNU Compiler Collection(GNU編譯器套裝),是一套由GNU工程開發(fā)的支持多種編程語言的編譯器。GCC是自由軟件發(fā)展過程中的著名例子,由自由軟件基金會以GPL協(xié)議發(fā)布,是大多數(shù)類Unix(如Linux、BSD、Mac OS X等)的標準編譯器,而且適用于Windows(借助其他移植項目實現(xiàn)的,比如MingW、Cygwin等)。GCC支持多種計算機體系芯片,如x86、ARM,并已移植到其他多種硬件平臺。

優(yōu)點:類Unix下的標準編譯器,支持眾多語言,支持交叉編譯。

缺點:默認不支持Windows,需要第三方移植才可用于Windows。

Cygwin

Cygwin是一個Windows下Unix-like模擬環(huán)境,具體說就是Unix-like接口(OS API,命令行)重定向?qū)?,其目的是不修改軟件源碼僅重新編譯就可以將Unix-like系統(tǒng)上的軟件移植到Windows上(這個移植也許還算不上嚴格意義上的無縫移植)。始于1995年,最初作為Cygnus軟件公司工程師Steve Chamberlain的一個項目。

和GCC的關(guān)系:Cygwin是讓W(xué)indows擁有Unix-like環(huán)境的軟件而不是編譯器,GCC是安裝在Cygwin上的編譯器。

優(yōu)點:可以比MingW移植更多的軟件到Windows上,對Linux接口模擬比MingW全面。

缺點:軟件運行依賴cygwin1.dll,速度受點影響。

注意:Unix-like模擬環(huán)境不是Unix虛擬環(huán)境,很多論述中都聲稱Cygwin是在Windows上盡可能模擬類Unix環(huán)境,這容易造成誤解,好像類Unix的elf程序可以直接運行在安裝了Cygwin的Windows上一樣。Cygwin和Wine的思路是不同的。在Windows+Cygwin上你可以像類Unix那樣使用命令行和編程,但elf等非exe格式的程序是不能被Cygwin運行的,所以Cygwin和Unix虛擬機、Wine是完全不同的,叫Unix-like環(huán)境,模擬非虛擬,是有限的選擇性的模擬,請不要誤解。

MingW

MingW(Minimalist GNU on Windows)是一個Linux/Windows下的可以把軟件源碼中Unix-like OS API調(diào)用通過頭文件翻譯替換成相應(yīng)的Windows API調(diào)用的編譯環(huán)境,其目的和Cygwin相同。從而把Linux上的軟件在不修改源碼的情況下編譯為可直接在Win下執(zhí)行的exe。

和GCC的關(guān)系:MingW是編譯環(huán)境,不是編譯器,GCC是MingW中的核心組成。

優(yōu)點:在Win下可以和Linux一樣的方式編譯C/C++源碼,可以說是Win版的GCC,其生產(chǎn)的Windows PE程序相比Cygwin不依賴任何第三方庫,比Cygwin純粹,理論上也更快速。

缺點:編譯速度、編譯出的程序在算法上可能都比MSVC慢。

注意:與Windows下其它編譯器不同的是,MinGW與Linux下廣泛使用的GNU近乎完全兼容,這意味著,在Linux下如何編譯源代碼,在MinGW中也可以以完全相同的方式編譯。有些Linux下的開發(fā)人員(比如開源陣營)發(fā)布的源代碼通常只提供Linux下的編譯方式,而不提供Windows下的編譯方式(這可能與其不熟悉windows操作系統(tǒng)有關(guān)),但確實有不少用戶需要在在Windows下編譯使用此源代碼。這在種情況下,如果Windows用戶想用VC、BC等編譯器編譯該源代碼,必須重寫Makefile(各種編譯器所支持的Makefile不盡相同),工作量比較大不說,還很難保證不出錯。MinGW的出現(xiàn),提供了兩個平臺下的“跨平臺編譯方案”。MinGW與MSYS相配合,連./configure都有了。與GNU不同的是,MinGW編譯生成的是Windows下的可執(zhí)行文件(.exe)或庫文件(.dll,.lib)——不過編譯過程中的的中間文件仍然是.o文件,而不是.obj文件(這當(dāng)然無所謂了,中間文件嘛,編譯完成后就沒有用了)。

在我們對比Cygwin和MingW之前,請先理清一件事,那就是,

如何從Unix-like系統(tǒng)向Windows系統(tǒng)移植軟件?

現(xiàn)代操作系統(tǒng)包括Windows和Linux的基本設(shè)計概念,像進程線程地址空間虛擬內(nèi)存這些都大同小異,二者之上的程序之所以不兼容,主要是它們對這些功能具體實現(xiàn)上的差異:

首先,是可執(zhí)行文件的格式,Window使用PE的格式,并且要求以.EXE為后綴名,Linux則使用Elf。

其次,操作系統(tǒng)API也同,比如,Windows用CreateProcess()創(chuàng)建進程,而Unix-like系統(tǒng)則使用fork(),其他還有很多諸如spawn、signals、select、sockets等。

分析之后可知,要把Unix-like系統(tǒng)上的軟件移植到Windows上,有幾種思路:

第一種:修改軟件源碼并重新編譯,這個方法最笨,類Unix下大量的軟件要修改工作量很大,編譯生成目標平臺可執(zhí)行文件格式。

第二種:不修改軟件源碼但把類Unix接口調(diào)用悄悄替換為WinAPI,還是需要重新編譯,編譯生成目標平臺可執(zhí)行文件格式。

第三種,無縫移植的運行環(huán)境,無需重新編譯,在一種OS上建立另一中OS的應(yīng)用軟件虛擬環(huán)境(和虛擬機不一樣),比如Wine(把Windows上的可執(zhí)行程序直接原樣移植到Linux上)。

Cygwin和MingW的對比

作為編譯環(huán)境時,都依賴于GCC

用它們作編譯環(huán)境、交叉編譯,根本上都是因為GCC編譯器的支持,它們做的工作是為GCC的編譯掃除Unix-like、Windows間OS API的差異這個障礙。

二者都必須重新編譯后實現(xiàn)移植,生成的程序都是PE格式

二者都不能讓Linux下的程序直接運行在Windows上(無縫移植),必須通過源代碼重新編譯。有些人聲稱cygwin支持rpm的壓縮包,注意,rpm壓縮包其實是src.rpm,內(nèi)部還是源碼而非elf格式,cygwin不支持常規(guī)rpm包的安裝。

Cygwin運行在Windows上,MingW運行在Linux或者Windows上

Cygwin是Windows上運行的Unix-like環(huán)境,MingW是運行在Linux或者Windows上的Windows PE編譯環(huán)境。

MingW中的子項目MSys和Cygwin更像

Cygwin除了全面模擬Linux的接口(命令行,OS API),提供給運行在它上面的的Windows程序使用,并提供了大量現(xiàn)成的軟件,更像是一個平臺。MingW也有一個叫MSys(Minimal SYStem)的子項目,主要是提供了一個模擬Linux的Shell和一些基本的Linux工具。因為編譯一個大型程序,光靠一個GCC是不夠的,還需要有Autoconf等工具來配置項目,所以一般在Windows下編譯ffmpeg等Linux下的大型項目都是通過Msys來完成的,當(dāng)然Msys只是一個輔助環(huán)境,根本的工作還是MingW來做的。

實現(xiàn)思路有同有異

Cygwin和MingW都是第二種軟件移植思路,當(dāng)然,二者還是有區(qū)別,區(qū)別就在于“替換”方式,Cygwin編譯時,程序依然以Linux的方式調(diào)用系統(tǒng)API,只不過把Unix-like接口link到自己的cygwin1.dll上,然后在cygwin1.dll中重新調(diào)用Windows API,cygwin1.dll再調(diào)用Windows對應(yīng)的實現(xiàn),來把結(jié)果返回給程序。也就是說,他們基于Win32 API中寫了一個Unix系統(tǒng)API的重定向?qū)?,所以用它移植的軟件都依賴于cygwin1.dll,MingW編譯時通過特有的WinAPI頭文件把類Unix-like調(diào)用替換為WinAPI,用它移植的軟件無需依賴第三方庫,可直接運行在Windows平臺。為了達到類Unix軟件僅通過重新編譯移植到Win的目的,Cygwin在運行時偷梁換柱,MingW在編譯時偷梁換柱。

用一個PE格式查看工具檢查一下就能發(fā)現(xiàn),Cygwin生成的程序依然有fork()這樣的Linux系統(tǒng)調(diào)用,但目標庫是cygwin1。而MingW生成的程序,則全部使用從KERNEL32導(dǎo)出的標準Windows系統(tǒng)API。

使用方式有同有異

把類Unix上的軟件移植到Windows是二者的主要目標,除此之外,順帶的,MingW和Cygwin都可以用來跨平臺開發(fā)等等其他事情,

Windows + Cygwin:可以在Windows上學(xué)習(xí)Linux命令,還可以在Windows上做Linux軟件的開發(fā),包括用GCC編譯elf(交叉編譯)。

Linux + MingW:可以在Linux上做Windows軟件的開發(fā),包括用GCC編譯exe(交叉編譯)。

Windows/Linux + MingW:可以擺脫MSVC的“束縛”,用GNU的自由軟件來編譯生成不依賴第三方庫的純粹Windows PE格式(exe)二進制程序。

Cygwin重量級,MingW輕量級

與MingW思路一致的,兩者相比,Cygwin是重量級的(需下載50M以上直至數(shù)百兆不等,安裝后占用空間可達1G),MinGW是輕量級的(需下載的文件只有20M,安裝后70M左右),這是單純從體積上說的,另外Cygwin現(xiàn)在據(jù)說也不是完全免費的了。

網(wǎng)絡(luò)上的對比列表(UnxUtils自行無視,僅供參考)

功能 UnxUtils MinGW Cygwin
設(shè)計原理 原生 原生 模擬
運行依賴 無依賴 依賴msys.dll(一定依賴它嗎?值得驗證) 依賴cygwin.dll
運行性能(比較) 最快 中等
DOS執(zhí)行 可以 可以 不可以
更新速度 完善停止更新 較慢 基本同步gcc
shell命令 較多 較少 較多
uname WindowsNT MINGW32_NT-5.1 CYGWIN_NT-5.1
env 同Windows 同Windows 不完全同Windows
root C:/ C:/ /
home C:/Documents and Settings/test /home/test: No such file or directory /home/test
pwd C:/bin /usr/bin /home/test
df cannot read table of mounted filesystems /cygdrive/c
vi
gcc套件
開發(fā)庫 WinAPI POSIX
圖形庫 GTK/QT GTK/QT
可移植性 Win32API不可移植 無縫移植
程序運行 原生 模擬
程序依賴 cygwin.dll
程序性能(比較) 較快(慢于VC和Linux下的gcc) 較慢(快于java)

小拓展

一個編譯器編譯時能否調(diào)用編譯其他編譯器產(chǎn)生的lib、dll?

不可以,name***不同,也就是名字混淆方式不同。

15款最好的C/C++編譯器和集成環(huán)境

編程語言有許多,而且新的語言層出不窮,但是C 和 C++作為歷史悠久的兩門語言,久經(jīng)考驗,仍然是晉級高手的必修語言,它們有著許多卓越的特性,更高效的功能和支持工具。現(xiàn)在這兩種語言依然那么活躍,因為它們的 rubout 函數(shù)集提供了巨大的安全保障,可靠性非常強。

工欲善其事必先利其器,今天我們介紹的是一些超級棒的 C 和 C++ 的集成開發(fā)環(huán)境(IDE)和編譯器。IDE 主要是在程序員開發(fā)時提供各種軟件應(yīng)用組件,最受程序員受歡迎的 IDE 都有一個共同點,那就是非常有吸引力的用戶界面。這里我們收集了一些最好的 C 和 C++ 的 IDEs 和編譯器。

1) kDevelop

Kdevelop 是 C/C++ 和其他語言的開源插件可擴展 IDE,是基于 KDevPlatform ,KDevPlatform 是個開源程序集,可以作為 IDE 的基礎(chǔ)。

KDevelop-Project 誕生于 1998 年,其目的是為 KDE 提供一個易用的集成開發(fā)環(huán)境(Integrated Development Environment)。此后,KDevelop IDE 采用 GPL 進行發(fā)布, 它支持很多程序設(shè)計語言。

是一個用于 C,C ++,Python,JavaScript 和 PHP 的跨平臺 IDE

官方網(wǎng)站:https://www.kdevelop.org/

2) Anjuta

Anjuta Devstudio 是另一個卓越的開發(fā)環(huán)境,擁有很多超棒的功能,包括項目管理,應(yīng)用程序向?qū)?,交互式調(diào)試器,源代碼編輯器,版本控制,GUI 設(shè)計工具,性能分析器等等。這個 IDE 提供超強大的用戶界面開發(fā) C/C++ 程序的接口。

Anjuta是一個建立在GNU/Linux下為C、C++提供編譯的集成開發(fā)環(huán)境。它最初旨在為GTK/GNOME設(shè)計,并且自身具有很好的編程屬性。這其中包括項目管理、應(yīng)用開發(fā)、交互調(diào)試以及強大的代碼編輯和語法增彩的性質(zhì)。

Anjuta成為Gnome環(huán)境下最理想的開發(fā)工具,其主要功能和KDE下的Kdevelop相似,目前最新的版本是3.2.0。

官方網(wǎng)站: http://anjuta.org/

3) Code Blocks

code block 是最流行的免費開源的集成環(huán)境之一,這個 IDE 包括所有開發(fā)者需要的功能,比如:高效的用戶界面,編譯器和調(diào)試器等等。

官方網(wǎng)站:https://www.codeblocks.org/

4) Visual Mingw

Visual-MigGW 是個極其抽象的開源 IDE。它所有 Windows API 都變得極其簡單,可以進行快速開發(fā)。它提供一個簡化代碼和獲取 C++ 對象的模塊,提前準備好使用應(yīng)用框架的環(huán)境。

官方網(wǎng)站:http://visual-mingw.sourceforge.net/

5) Ideone

Ideone 是 C 和 C++ 的在線編譯和調(diào)試工具,支持其他的 60 種語言。這個工具提供許多強大的功能,允許程序員快速高效的編譯源代碼。

官方網(wǎng)站:https://www.ideone.com/

6) Eclipse CDT

Eclipse CDT 是最權(quán)威也是最流行的 IDE,提供超多高效的特性:支持項目創(chuàng)建和各種工具鏈的管理,標準 make 構(gòu)建,源代碼導(dǎo)航,各種源知識工具,有語法高亮顯示功能的代碼編輯器,可視化的調(diào)試工具,博阿奎內(nèi)存,寄存器和反匯編查看器。

官方網(wǎng)站:http://www.eclipse.org/cdt/

7) Compilr

compiler 是個在線集成開發(fā)工具,允許用戶使用工具來編寫代碼和創(chuàng)建簡單的用戶界面。此工具支持超級多的編程語言,比如 C,C++,Java,HTML 等等。

官方網(wǎng)站:https://www.crunchbase.com/organization/compilr

8) Code Lite

Code lite 是另一個超級棒的免費開源的 C 和 C++ 的 IDE,可以在所有流行的平臺上運行(Windows,OS X,Linux 等)。

官方網(wǎng)站:https://codelite.org/

9) Netbeans C++

Netbeans 工具包括大量的 C 和 C++ 的適用的項目類型模版,可以使用動態(tài)和靜態(tài)庫去創(chuàng)建 C/C++ 應(yīng)用。它包括了一系列的特性,得到了廣大程序員的喜愛: Code assistance,編譯器配置,單元測試,source inspection,遠程開發(fā)和文件導(dǎo)航等等。

官方網(wǎng)站:https://netbeans.apache.org/kb/docs/cnd/

編譯器:

10) Dev C++

Dev C++ 是個全功能的 IDE,有以下特性:1) 類查看器 2) 集成調(diào)試 3) 支持基于 GCC 的編譯器 4) 項目管理 5) 編譯器 6) 編輯和編譯資源文件 7) 工具管理器 8) 函數(shù)列表

官方網(wǎng)站:https://bloodshed-dev-c.en.softonic.com/

11) Ultimate++

Ultimate++ 是個杰出的 C++ 開發(fā)框架,這個 IDE 包括 C++ 編程的模塊化概念,可以使用GCC,MinGW 和 Visual C++ 。

官方網(wǎng)站:https://www.ultimatepp.org/

12) Digital Mars

DigitalMars 是個高性能的 C 和 C++ 的編譯器,包括許多很棒的特性,比如最快的編譯/鏈接 時間,強大的優(yōu)化技術(shù),關(guān)聯(lián)設(shè)計,完整的庫資源,HTML 可讀文檔,反匯編程序,庫管理,資源編譯,make 等等。有命令行和 GUI 版本,教程,示例代碼,在線更新,標準模版庫和其他更多的功能。

官方網(wǎng)站:

13) C-Free

C-Free是一款可支持多種編譯器且專業(yè)化的C/C++集成開發(fā)環(huán)境(IDE)。小伙伴們可以使用這款C-Free完成需要的編輯、運行、調(diào)試C/C++、編譯等操作處理。C-Free可以增強只能輸入功能、添加語言加亮器、代碼定位等功能。

官方網(wǎng)站:http://www.programarts.com/cfree_ch/index.htm

14) MinGW

MinGW 編譯器提供訪問微軟 C 運行時功能和一些特定語言的運行時。

官方網(wǎng)站:http://www.mingw-w64.org/doku.php

15) Tiny C Compiler

Tiny c compiler 是最好的 C 語言編譯器之一,它有許多讓開發(fā)者驚訝的功能,可以在任何地方編譯源代碼,可以使用任何 C 動態(tài)庫,可以直接編譯和執(zhí)行 C 源代碼,包括完整的 C 預(yù)處理器和 GNU 類的匯編程序。

官方網(wǎng)站:https://bellard.org/tcc/

到此這篇關(guān)于推薦幾款C/C++的編譯器、編譯環(huán)境(非常全面的比較)的文章就介紹到這了,更多相關(guān)C/C++編譯器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++使用模板類實現(xiàn)鏈式棧

    C++使用模板類實現(xiàn)鏈式棧

    這篇文章主要為大家詳細介紹了C++使用模板類實現(xiàn)鏈式棧,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++中remove與erase區(qū)別小結(jié)

    C++中remove與erase區(qū)別小結(jié)

    remove函數(shù)和 erase函數(shù)都可以實現(xiàn)元素的刪除,本文主要介紹了C++中remove與erase區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • C語言簡明講解操作符++和--的使用方法

    C語言簡明講解操作符++和--的使用方法

    ++和--運算符分別是+=1和-=1的簡寫。設(shè)計這樣兩個運算符的本意是?便程序員,但i++和++i使?不恰當(dāng)有時候會造成混淆,反倒令剛?cè)腴T的C程序員有點混亂
    2022-04-04
  • c++ 構(gòu)造函數(shù)的初始化列表

    c++ 構(gòu)造函數(shù)的初始化列表

    構(gòu)造函數(shù)的初始化列表僅僅指定用于初始化成員的值,并不指定這些初始化執(zhí)行的次序。成員初始化的次序就是定義成員的次序,第一個成員首先被初始化,然后是第二個,依次類推
    2013-07-07
  • C語言實現(xiàn)經(jīng)典掃雷小游戲的示例代碼

    C語言實現(xiàn)經(jīng)典掃雷小游戲的示例代碼

    掃雷游戲是在一個指定的二維空間里,隨機布置雷,把不是雷的位置都找出來,在你點一個位置的時候它會顯示它周圍全部雷的個數(shù),根據(jù)這個線索去找 ,會更容易贏。本文將用C語言實現(xiàn)這一經(jīng)典游戲,感興趣的可以嘗試一下
    2022-11-11
  • C++實現(xiàn)AVL樹的基本操作指南

    C++實現(xiàn)AVL樹的基本操作指南

    AVL樹是高度平衡的而二叉樹,它的特點是AVL樹中任何節(jié)點的兩個子樹的高度最大差別為1,下面這篇文章主要給大家介紹了關(guān)于C++實現(xiàn)AVL樹的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Windows安裝配置C/C++(VS2017)OpenSSL開發(fā)環(huán)境配置教程

    Windows安裝配置C/C++(VS2017)OpenSSL開發(fā)環(huán)境配置教程

    這篇文章主要為大家詳細介紹了Windows安裝配置C/C++,OpenSSL開發(fā)環(huán)境配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C++服務(wù)器和客戶端交互的項目實踐

    C++服務(wù)器和客戶端交互的項目實踐

    本文主要介紹了C++服務(wù)器和客戶端交互的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 解析為何要關(guān)閉數(shù)據(jù)庫連接,可不可以不關(guān)閉的問題詳解

    解析為何要關(guān)閉數(shù)據(jù)庫連接,可不可以不關(guān)閉的問題詳解

    本篇文章是對為何要關(guān)閉數(shù)據(jù)庫連接,可不可以不關(guān)閉的問題進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺析C++中的動態(tài)內(nèi)存分配

    淺析C++中的動態(tài)內(nèi)存分配

    這篇文章主要為大家詳細介紹了C++中動態(tài)內(nèi)存分配的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03

最新評論