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

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2018年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910


專注即時通訊及網游服務端編程
------------------------------------
Openresty 官方模塊
Openresty 標準模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 220955
  • 排名 - 117

最新評論

閱讀排行榜

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

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

關于什么是Unix-like操作系統,常見操作系統間差異,什么是操作系統接口等等,請參考《操作系統寶鑒》。

 

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

 

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

 

 

主流C/C++編譯器|編譯環境簡介

 

MSVC

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

優點:對Windows平臺支持好,編譯快。

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

 

 

GCC

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

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

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

 

 

Cygwin

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

和GCC的關系:Cygwin是讓Windows擁有Unix-like環境的軟件而不是編譯器,GCC是安裝在Cygwin上的編譯器。

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

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

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

 

MingW

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

和GCC的關系:MingW是編譯環境,不是編譯器,GCC是MingW中的核心組成。

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

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

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

 

 

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

如何從Unix-like系統向Windows系統移植軟件?

 

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

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

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

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

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

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

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

 

Cygwin和MingW的對比

 

作為編譯環境時,都依賴于GCC

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

 

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

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

 

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

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

 

MingW中的子項目MSys和Cygwin更像

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

 

實現思路有同有異

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

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

 

使用方式有同有異

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

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

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

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

 

Cygwin重量級,MingW輕量級

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

 

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

功能

UnxUtils

MinGW

Cygwin

設計原理

原生

原生

模擬

運行依賴

無依賴

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

依賴cygwin.dll

運行性能(比較)

最快

中等

DOS執行

可以

可以

不可以

更新速度

完善停止更新

較慢

基本同步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套件

開發庫

WinAPI

POSIX

圖形庫

GTK/QT

GTK/QT

可移植性

Win32API不可移植

無縫移植

程序運行

原生

模擬

程序依賴

cygwin.dll

程序性能(比較)

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

較慢(快于java)

 

 

小拓展

 

一個編譯器編譯時能否調用編譯其他編譯器產生的lib、dll?

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

 

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

posted on 2018-06-13 16:18 思月行云 閱讀(508) 評論(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热浪潮 | 亚洲欧美在线看| 欧美在线亚洲在线| 日韩一区二区福利| 篠田优中文在线播放第一区| 亚洲国产精品一区二区久 | 亚洲激情国产| 中文久久精品| 在线观看视频免费一区二区三区| 亚洲日本欧美| 国产欧美日本一区视频| 欧美激情中文字幕一区二区| 国产精品视频一区二区三区| 亚洲成人自拍视频| 国产麻豆视频精品| 亚洲人成亚洲人成在线观看| 国产一区二区精品久久99| 亚洲国产视频a| 好吊视频一区二区三区四区| 亚洲一区二区三区精品视频| 亚洲国产日韩欧美在线图片| 亚洲一区二区三区国产| 亚洲日本va午夜在线电影| 欧美一区亚洲一区| 亚洲免费在线精品一区| 欧美黄在线观看| 欧美大片91| 国产综合色产在线精品| 一区二区三区免费在线观看| 亚洲精品视频在线观看网站| 久久色在线观看| 久久久五月婷婷| 国产精品亚洲视频| 亚洲香蕉成视频在线观看| 夜夜嗨av一区二区三区| 毛片av中文字幕一区二区| 久久全球大尺度高清视频| 国产精品一区免费视频| 宅男66日本亚洲欧美视频| 一本色道久久综合| 欧美激情导航| 亚洲精品久久视频| 亚洲精品免费在线| 欧美成人有码| 亚洲国产日日夜夜| 亚洲乱码国产乱码精品精98午夜| 麻豆成人综合网| 亚洲大片在线| 亚洲精品在线观看视频| 欧美激情a∨在线视频播放| 欧美激情视频给我| 亚洲乱码日产精品bd| 欧美精品97| 日韩午夜视频在线观看| 亚洲无毛电影| 免费不卡中文字幕视频| 欧美一区二区三区免费视频| 久久九九国产精品怡红院| 欧美专区日韩视频| 国产一区二区三区视频在线观看| 在线视频日韩| 欧美在线影院在线视频| 亚洲男女自偷自拍| 国产日本精品| 久久综合99re88久久爱| 欧美在线欧美在线| 精品电影在线观看| 蜜桃精品久久久久久久免费影院| 久久狠狠婷婷| 亚洲高清不卡一区| 亚洲精美视频| 欧美性猛交99久久久久99按摩 | 亚洲网站视频| 亚洲欧美成人综合| 国产原创一区二区| 欧美大片免费观看在线观看网站推荐| 狼人社综合社区| 一本高清dvd不卡在线观看| 一区二区三区福利| 好吊日精品视频| 91久久久精品| 国产人成精品一区二区三| 蜜臀a∨国产成人精品| 欧美精品日韩综合在线| 亚洲欧美成aⅴ人在线观看| 午夜精品久久久久久99热| 在线观看亚洲精品视频| 亚洲精品欧美极品| 国产欧美91| 亚洲国产婷婷香蕉久久久久久| 国产精品高潮呻吟久久| 久久久精品国产免费观看同学| 免费在线亚洲欧美| 久久大综合网| 欧美久久久久久久久久| 久久国产欧美| 欧美美女操人视频| 免费日韩av片| 国产精品视频久久久| 欧美高清视频一区二区三区在线观看| 欧美午夜不卡在线观看免费 | 国内精品久久久久久久影视麻豆| 欧美成人精品在线视频| 国产精品扒开腿做爽爽爽视频| 久久亚洲综合色| 欧美日韩亚洲综合在线| 麻豆成人小视频| 国产精品视频一二| 日韩小视频在线观看专区| 极品少妇一区二区三区| 一本色道久久综合亚洲91| 悠悠资源网亚洲青| 午夜免费日韩视频| 亚洲视频一二区| 欧美激情一区二区三区蜜桃视频 | 国产乱码精品一区二区三区忘忧草| 久久久亚洲欧洲日产国码αv| 欧美日韩情趣电影| 欧美成人免费va影院高清| 国产日产欧美精品| 亚洲午夜久久久久久尤物| 亚洲精品久久久久久久久久久| 久久久久国产精品一区二区| 欧美亚洲一区在线| 国产精品久久久久一区二区三区| 亚洲精品免费在线观看| 亚洲人成在线免费观看| 另类图片国产| 免费高清在线视频一区·| 国产专区综合网| 欧美一区二区视频免费观看| 亚洲欧美中文在线视频| 国产精品国产三级国产普通话蜜臀| 日韩午夜一区| 亚洲综合国产| 国产精品视频免费观看| 亚洲欧美中日韩| 久久女同互慰一区二区三区| 国产婷婷一区二区| 亚洲欧美视频在线观看视频| 亚洲一区久久| 国产精品hd| 亚洲女人天堂av| 久久精品日韩| 亚洲电影自拍| 欧美粗暴jizz性欧美20| 91久久午夜| 亚洲私人影院在线观看| 国产精品草草| 性视频1819p久久| 免费中文日韩| 日韩午夜在线播放| 欧美日韩一区二区在线观看视频| 夜色激情一区二区| 欧美一区日韩一区| 伊人久久婷婷色综合98网| 蜜桃久久av一区| 亚洲美女一区| 久久国产日韩欧美| 亚洲国产精品久久91精品| 欧美美女bbbb| 亚洲欧美另类久久久精品2019| 另类综合日韩欧美亚洲| 99精品视频免费观看视频| 国产精品亚洲一区二区三区在线| 亚洲专区在线| 欧美国内亚洲| 亚洲午夜未删减在线观看| 韩国av一区二区三区| 欧美精品激情在线| 亚洲综合社区| 亚洲欧洲日产国产综合网| 午夜性色一区二区三区免费视频| 国产啪精品视频| 欧美jizzhd精品欧美巨大免费| 这里是久久伊人| 欧美 日韩 国产一区二区在线视频 | 好吊一区二区三区| 亚洲福利一区| 欧美精品二区| 午夜精品久久久久久久99樱桃| 久久久青草婷婷精品综合日韩 | 国产精品久久久久久户外露出| 久久久精品一区| 亚洲在线观看免费视频| 欧美激情中文字幕在线| 欧美在线免费观看| 日韩一区二区精品在线观看| 国产日韩专区| 国产精品久久久久9999高清| 美女尤物久久精品| 欧美淫片网站| 亚洲亚洲精品在线观看| 亚洲精品久久久蜜桃| 欧美成人精品不卡视频在线观看| 亚洲欧美在线磁力|