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

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


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

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 221733
  • 排名 - 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 思月行云 閱讀(513) 評論(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久久久久久白浆小说 | 亚洲经典三级| 欧美国产日韩xxxxx| 看欧美日韩国产| 136国产福利精品导航| 欧美成人午夜视频| 欧美精品日韩一区| 性8sex亚洲区入口| 久久都是精品| 亚洲精品在线观看免费| 99re66热这里只有精品4| 中文av字幕一区| 亚洲综合色婷婷| 在线看片成人| 日韩视频一区二区三区在线播放免费观看 | 欧美高清成人| 欧美激情精品久久久久久| 亚洲一区3d动漫同人无遮挡| 午夜国产不卡在线观看视频| 亚洲国产精品久久久久婷婷884| 亚洲国产精品久久人人爱蜜臀| 欧美成va人片在线观看| 亚洲一二三区精品| 久久成人av少妇免费| 亚洲青色在线| 亚洲欧美另类中文字幕| 亚洲美女av网站| 亚洲欧美中文另类| 亚洲精品日韩激情在线电影| 亚洲综合久久久久| 亚洲免费久久| 久久久久久久久久久久久久一区| 一区二区激情小说| 久久久精品久久久久| 亚洲一区三区视频在线观看| 久久中文字幕一区| 久久riav二区三区| 欧美久久久久久蜜桃| 久久免费视频网站| 欧美日韩久久| 欧美黄免费看| 韩日精品视频| 性欧美暴力猛交另类hd| 亚洲午夜国产一区99re久久| 麻豆成人在线播放| 久久九九全国免费精品观看| 欧美日韩精品一区二区三区四区 | 欧美成人一区在线| 国产日韩欧美一区在线| 99综合视频| 亚洲精品久久久久久久久久久久 | 国产欧美一区二区三区沐欲| 亚洲人成在线影院| 亚洲国产视频一区二区| 久久精品导航| 久久精品亚洲热| 国产精品亚洲片夜色在线| 一本色道久久88亚洲综合88| 亚洲麻豆视频| 欧美精品一区二区蜜臀亚洲 | 亚洲在线观看视频网站| 午夜一区二区三区不卡视频| 久久久久久久欧美精品| 久久aⅴ国产紧身牛仔裤| 亚洲午夜精品久久久久久app| 久久综合五月天婷婷伊人| 久热精品视频在线观看一区| 国产欧美日韩在线观看| 在线亚洲精品| 欧美亚洲视频| 国产精品视频你懂的| 亚洲午夜视频| 欧美一区二区在线播放| 国产伦精品一区二区三区照片91| 亚洲女与黑人做爰| 欧美中文字幕在线播放| 国产视频自拍一区| 久久久福利视频| 老司机免费视频久久| 91久久线看在观草草青青| 欧美高清不卡在线| 99亚洲视频| 欧美一区二区三区四区在线观看地址| 国产精品久久久久久久午夜 | 久久久www成人免费毛片麻豆| 国产精品亚洲人在线观看| 欧美一级精品大片| 欧美1区3d| 午夜精品亚洲一区二区三区嫩草| 亚洲精品久久| 国产精品都在这里| 亚洲欧美视频一区二区三区| 久久久免费av| 亚洲欧洲精品一区二区三区不卡| 亚洲每日更新| 国产乱码精品一区二区三| 久久久午夜视频| 亚洲精品欧美| 亚洲欧美另类国产| 国内自拍视频一区二区三区 | 亚洲自拍偷拍福利| 美女在线一区二区| 一区二区三区**美女毛片| 国产精品欧美日韩一区二区| 久久www成人_看片免费不卡| 亚洲国产欧美精品| 欧美一级理论片| 亚洲精品三级| 国产一区激情| 欧美视频在线观看免费网址| 久久成人综合视频| 99视频在线观看一区三区| 免费一区视频| 欧美亚洲在线观看| 一区二区电影免费在线观看| 狠狠色伊人亚洲综合成人| 欧美视频一区二区三区…| 久久精品在这里| 亚洲欧美日韩国产综合| 亚洲欧洲免费视频| 欧美福利电影在线观看| 久久国产欧美日韩精品| 一区二区免费看| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美mv日韩mv国产网站| 午夜影院日韩| 亚洲尤物在线视频观看| 91久久精品一区二区三区| 久久香蕉国产线看观看网| 亚洲女ⅴideoshd黑人| 一区二区国产在线观看| 亚洲精品免费一区二区三区| 亚洲第一狼人社区| 国内精品视频久久| 国产欧美一区二区精品婷婷 | 欧美另类在线观看| 另类欧美日韩国产在线| 久久久91精品国产一区二区三区 | 国产乱人伦精品一区二区| 欧美人与性动交cc0o| 免费成人黄色片| 欧美精品高清视频| 国产一区二区在线免费观看| 欧美大片免费观看在线观看网站推荐| 欧美一区中文字幕| 亚洲欧美综合一区| 午夜国产精品影院在线观看| 亚洲一区二区影院| 这里只有精品视频| 亚洲天堂黄色| 亚洲综合二区| 午夜久久黄色| 久久精品女人| 看片网站欧美日韩| 欧美成人激情视频免费观看| 六十路精品视频| 欧美顶级少妇做爰| 欧美精选一区| 国产精品高潮呻吟视频| 国产精品户外野外| 国产欧美一区在线| 黄色小说综合网站| 亚洲国产成人不卡| 一本色道久久综合亚洲精品不卡| 日韩亚洲欧美成人| 亚洲欧美第一页| 久久黄金**| 欧美电影资源| av成人毛片| 欧美一级欧美一级在线播放| 老司机精品导航| 欧美先锋影音| 激情综合电影网| 在线一区二区三区做爰视频网站 | 狠狠88综合久久久久综合网| 精品成人一区二区三区四区| 亚洲精品在线观看免费| 亚洲综合色网站| 欧美jizzhd精品欧美巨大免费| 亚洲啪啪91| 午夜亚洲影视| 欧美极品色图| 国产一区二区电影在线观看| 亚洲精品资源| 久久天堂av综合合色| 欧美激情免费观看| 国产性猛交xxxx免费看久久| 日韩小视频在线观看| 欧美在线日韩| 亚洲人午夜精品| 久久亚洲国产精品一区二区| 欧美日韩mv| 亚洲国产电影| 久久久国产精品一区| 亚洲日本va午夜在线电影| 久久高清一区| 国产精品久久久久久久久久免费| 91久久精品国产| 美女精品网站|