青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2017年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234


專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
------------------------------------
Openresty 官方模塊
Openresty 標(biāo)準(zhǔn)模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請保留相關(guān)信息,這是大家對原創(chuàng)作者勞動成果的自覺尊重?。∪鐬槟鷰聿槐?,請于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 219730
  • 排名 - 117

最新評論

閱讀排行榜

C/C++的編譯器|編譯環(huán)境(非常全面的比較)

C/C++編譯器的一些易混淆概念,總結(jié)一下。

關(guān)于什么是Unix-like操作系統(tǒng),常見操作系統(tǒng)間差異,什么是操作系統(tǒng)接口等等,請參考《操作系統(tǒng)寶鑒》。

 

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編譯器……其實(shí)有一大串,我們只要熟悉常用的最強(qiáng)大的幾款就可以了。

 

 

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

 

MSVC

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

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

缺點(diǎn):對C++的新標(biāo)準(zhǔn)支持得少。

 

 

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等)的標(biāo)準(zhǔn)編譯器,而且適用于Windows(借助其他移植項(xiàng)目實(shí)現(xiàn)的,比如MingW、Cygwin等)。GCC支持多種計(jì)算機(jī)體系芯片,如x86、ARM,并已移植到其他多種硬件平臺。

優(yōu)點(diǎn):類Unix下的標(biāo)準(zhǔn)編譯器,支持眾多語言,支持交叉編譯。

缺點(diǎn):默認(rèn)不支持Windows,需要第三方移植才可用于Windows。

 

 

Cygwin

Cygwin是一個(gè)Windows下Unix-like模擬環(huán)境,具體說就是Unix-like接口(OS API,命令行)重定向?qū)樱淠康氖遣恍薷能浖创a僅重新編譯就可以將Unix-like系統(tǒng)上的軟件移植到Windows上(這個(gè)移植也許還算不上嚴(yán)格意義上的無縫移植)。始于1995年,最初作為Cygnus軟件公司工程師Steve Chamberlain的一個(gè)項(xiàng)目。

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

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

缺點(diǎn):軟件運(yùn)行依賴cygwin1.dll,速度受點(diǎn)影響。

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

 

MingW

MingW(Minimalist GNU on Windows)是一個(gè)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)點(diǎn):在Win下可以和Linux一樣的方式編譯C/C++源碼,可以說是Win版的GCC,其生產(chǎn)的Windows PE程序相比Cygwin不依賴任何第三方庫,比Cygwin純粹,理論上也更快速。

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

注意:與Windows下其它編譯器不同的是,MinGW與Linux下廣泛使用的GNU近乎完全兼容,這意味著,在Linux下如何編譯源代碼,在MinGW中也可以以完全相同的方式編譯。有些Linux下的開發(fā)人員(比如開源陣營)發(fā)布的源代碼通常只提供Linux下的編譯方式,而不提供Windows下的編譯方式(這可能與其不熟悉windows操作系統(tǒng)有關(guān)),但確實(shí)有不少用戶需要在在Windows下編譯使用此源代碼。這在種情況下,如果Windows用戶想用VC、BC等編譯器編譯該源代碼,必須重寫Makefile(各種編譯器所支持的Makefile不盡相同),工作量比較大不說,還很難保證不出錯(cuò)。MinGW的出現(xiàn),提供了兩個(gè)平臺下的“跨平臺編譯方案”。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è)計(jì)概念,像進(jìn)程線程地址空間虛擬內(nèi)存這些都大同小異,二者之上的程序之所以不兼容,主要是它們對這些功能具體實(shí)現(xiàn)上的差異:

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

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

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

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

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

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

 

Cygwin和MingW的對比

 

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

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

 

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

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

 

Cygwin運(yùn)行在Windows上,MingW運(yùn)行在Linux或者Windows上

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

 

MingW中的子項(xiàng)目MSys和Cygwin更像

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

 

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

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

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

 

使用方式有同有異

把類Unix上的軟件移植到Windows是二者的主要目標(biāo),除此之外,順帶的,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)二進(jìn)制程序。

 

Cygwin重量級,MingW輕量級

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

 

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

功能

UnxUtils

MinGW

Cygwin

設(shè)計(jì)原理

原生

原生

模擬

運(yùn)行依賴

無依賴

依賴msys.dll(一定依賴它嗎?值得驗(yàn)證)

依賴cygwin.dll

運(yùn)行性能(比較)

最快

中等

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不可移植

無縫移植

程序運(yùn)行

原生

模擬

程序依賴

cygwin.dll

程序性能(比較)

較快(慢于VC和Linux下的gcc)

較慢(快于java)

 

 

小拓展

 

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

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

 

http://rendao.org/blog/1071/

posted on 2018-06-13 16:18 思月行云 閱讀(498) 評論(0)  編輯 收藏 引用 所屬分類: C\C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清视频在线| 亚洲精品在线观看视频| 亚洲欧美国产一区二区三区| 日韩亚洲国产欧美| 欧美天天在线| 欧美影院一区| 久久一二三四| 99日韩精品| 香蕉成人伊视频在线观看 | 久久精品一区二区三区不卡牛牛| 国产亚洲成精品久久| 久热精品视频| 欧美日韩亚洲一区三区| 性亚洲最疯狂xxxx高清| 久久久久久久久久久久久久一区| 亚洲国产色一区| 一区二区三区你懂的| 国产亚洲一区二区三区| 亚洲国产美女久久久久| 国产精品女人毛片| 欧美黄色成人网| 国产精品青草综合久久久久99 | 免费在线成人av| 欧美精品在线网站| 久久一区二区三区国产精品 | 一区二区三区久久| 怡红院精品视频| 亚洲天堂av电影| 亚洲精品一二| 久久激情视频久久| 亚洲专区在线| 麻豆成人av| 久久激情综合| 欧美午夜精品一区| 欧美电影免费观看| 国产精品自拍一区| 亚洲人成艺术| 亚洲国产小视频在线观看| 亚洲与欧洲av电影| 亚洲少妇诱惑| 欧美精品性视频| 欧美xx视频| 狠狠综合久久av一区二区小说 | 久久综合一区二区| 久久激情视频久久| 国产精品理论片| 日韩视频在线永久播放| 最近看过的日韩成人| 久久精品国产精品| 久久成人18免费观看| 国产精品成人播放| 亚洲人久久久| 日韩一二三在线视频播| 午夜一区二区三区不卡视频| 99国产精品99久久久久久粉嫩| 亚洲国产成人91精品| 久久久噜噜噜久久久| 久久久久久久91| 国产亚洲二区| 欧美一区二区私人影院日本| 久久成人精品视频| 国产视频一区三区| 午夜精品视频在线观看一区二区| 午夜精品免费在线| 国产精品久久中文| 亚洲欧美成人网| 欧美一区二区在线视频| 国产亚洲精品综合一区91| 亚洲——在线| 欧美伊人久久久久久久久影院| 国产精品国码视频| 亚洲欧美国产精品桃花| 久久精品二区亚洲w码| 狠狠干综合网| 麻豆国产va免费精品高清在线| 亚洲国产精品久久91精品| 亚洲精品一区二| 欧美日本一区| 久久亚洲综合网| 久久婷婷综合激情| 欧美一区二区久久久| 羞羞色国产精品| 久久久久国色av免费观看性色| 一区二区三区偷拍| 在线亚洲自拍| 欧美日韩在线视频首页| 一区二区三区免费观看| 午夜精品福利视频| 国产专区精品视频| 免费在线亚洲欧美| 亚洲视频第一页| 久久久精品一区二区三区| 亚洲精品四区| 国产美女扒开尿口久久久| 久久综合色影院| 亚洲私拍自拍| 欧美激情在线有限公司| 亚洲欧美日韩精品久久奇米色影视 | 一区二区三区无毛| 欧美激情一二三区| 欧美一区二区免费| 最新国产成人在线观看| 亚洲性视频网站| 在线观看视频日韩| 国产精品久久9| 免费看精品久久片| 亚洲欧美精品在线观看| 欧美激情视频一区二区三区在线播放| 中文在线资源观看视频网站免费不卡| 国产欧美日韩不卡免费| 欧美电影专区| 久久国产精品久久国产精品| 亚洲理伦在线| 欧美成人一区二区三区片免费| 妖精成人www高清在线观看| 激情欧美亚洲| 亚洲破处大片| 欧美福利视频在线| 99国产精品| 欧美r片在线| 久久久久久穴| 欧美一区二区在线观看| 一区二区欧美日韩| 亚洲黄色成人网| 精品999在线播放| 国产亚洲va综合人人澡精品| 国产精品av久久久久久麻豆网| 卡通动漫国产精品| 欧美在线不卡| 久久大综合网| 久久国产精品99国产精| 午夜欧美大尺度福利影院在线看| 亚洲乱码一区二区| 亚洲精品一区二区三区不| 欧美激情在线观看| 欧美激情一区在线观看| 欧美寡妇偷汉性猛交| 欧美不卡在线| 亚洲高清免费视频| 亚洲国产日韩欧美一区二区三区| 嫩草成人www欧美| 欧美刺激性大交免费视频| 免费黄网站欧美| 欧美激情精品久久久久久大尺度 | 99pao成人国产永久免费视频| 亚洲激情网站免费观看| 91久久在线播放| 99re热精品| 亚洲一二三级电影| 欧美亚洲一区在线| 久久精品视频免费播放| 久久久久久久综合| 欧美国产日韩精品| 亚洲人成7777| 一区二区三区视频在线观看| 一区二区三区久久| 亚洲五月婷婷| 久久精品国内一区二区三区| 久久久久久久尹人综合网亚洲| 久久精品五月婷婷| 欧美刺激午夜性久久久久久久| 欧美日本免费| 国产亚洲欧美一区二区三区| 一区二区在线不卡| 99国产精品视频免费观看| 亚洲欧美日韩电影| 免费看黄裸体一级大秀欧美| 亚洲人成久久| 欧美一级在线亚洲天堂| 你懂的网址国产 欧美| 欧美午夜精品一区| 国模吧视频一区| 一二三区精品| 久久综合色播五月| 日韩小视频在线观看专区| 亚洲欧美日韩国产另类专区| 老司机精品视频网站| 欧美日韩综合在线| 在线观看日韩av先锋影音电影院| 夜夜夜久久久| 免费观看在线综合| 亚洲欧美日韩成人| 欧美极品aⅴ影院| 国际精品欧美精品| 亚洲欧美日韩一区二区在线 | 欧美久久精品午夜青青大伊人| 国产人妖伪娘一区91| 日韩午夜激情av| 另类成人小视频在线| 亚洲视频一二| 欧美巨乳在线观看| 亚洲二区在线视频| 久久久久久久欧美精品| 一本色道久久综合亚洲精品高清| 先锋影音一区二区三区| 欧美视频在线观看免费网址| 在线看成人片| 久久久久五月天| 亚洲一区精彩视频| 欧美视频在线看|