国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

mingW與cygwin

2024-06-28 13:23:43
字體:
來源:轉載
供稿:網友
mingW與cygwin

轉自:http://hi.baidu.com/ooxxer/item/d25dccc072846a50ac00ef7e#

首先MingW和cygwin都可以用來跨平臺開發。  MinGW是Minimalistic GNU for Windows的縮寫,也就是Win版的GCC。  Cygwin則是全面模擬了linux的接口,提供給運行在它上面的的程序使用,并提供了大量現成的軟件,更像是一個平臺。  相對的MingW也有一個叫MSys(Minimal SYStem)的子項目,主要是提供了一個模擬Linux的Shell和一些基本的Linux工具。因為編譯一個大型程序,光靠一個GCC是不夠的,還需要有Autoconf等工具來配置項目,所以一般在Windows下編譯ffmpeg等Linux下的大型項目都是通過Msys來完成的,當然Msys只是一個輔助環境,根本的工作還是MingW來做的。 用MingW和cygwin編譯出來的程序的區別。  首先MingW和cygwin都不能讓Linux下的程序直接運行在Windows上,必需通過源代碼重新編譯。  現代操作系統包括Windows和Linux的基本設計概念像進程線程地址空間虛擬內存這些都是大同小異的,之所以二者上的程序不能兼容,主要是它們對這些功能具體實現上的差異,首先是可執行文件的格式,Window使用PE的格式,并且要求以.EXE為后綴名。Linux則使用Elf。其次操作系統的API也不一樣,如Windows用CreatePRocess()創建進程,而Linux使用fork()。  所以要移植程序必然要在這些地方進行改變,MingW有專門的W32api頭文件,來把代碼中Linux方式的系統調用替換為對應的Windows方式。而Cygwin則通過cygwin1.dll這個文件來實現這種API的轉換,并模擬一個Linux系統調用接口給程序,程序依然以Linux的方式調用系統API,只不過這個API在cygwin1.dll上,cygwin1.dll再調用Windows對應的實現,來把結果返回給程序。  可以用查看他們編譯好的程序的導入表來驗證這點。  二者生成的程序都是能在Windows上運行的EXE文件,顯然都是PE格式,用一個PE格式查看工具檢查一下就能發現,Cygwin生成的程序依然有fork()這樣的Linux系統調用,但目標庫是cygwin1。而MingW生成的程序,則全部使用從KERNEL32導出的標準Windows系統API。  這樣看來用Mingw編譯的程序性能會高一點,而且也不用帶著那個接近兩兆的cygwin1.dll文件。  但Cygwin對Linux的模擬比較完整,甚至有一個Cygwin X的項目,可以直接用Cygwin跑X。  另外Cygwin可以設置-mno-cygwin的flag,來使用Mingw編譯。  而與Cygwin更有可比性的MSys上的工具也是通過Cygwin這種模擬的方式來提供的。  總之這兩個項目有千絲萬縷的關系,一個不恰當的比方,如果Mingw是MFC,Cygwin就是.NET了。

=====================

1.修改編譯器,讓window下的編譯器把諸如fork的調用翻譯成等價的形式--這就是mingw的做法.  2.修改庫,讓window提供一個類似unix提供的庫,他們對程序的接口如同unix一樣,而這些庫,當然是由win32的API實現的--這就是cygwin的做法.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岱山县| 宁河县| 南昌县| 达日县| 融水| 平舆县| 迁安市| 三门县| 凤台县| 沙洋县| 信丰县| 隆林| 昭平县| 织金县| 内丘县| 定安县| 邵武市| 孟连| 台北市| 绥阳县| 庆安县| 康马县| 土默特左旗| 武功县| 鞍山市| 深圳市| 平山县| 阜康市| 亚东县| 宾阳县| 东乡县| 房产| 双柏县| 南木林县| 普格县| 庆安县| 西城区| 花莲县| 姚安县| 长葛市| 四会市|