從Linux到Windows必知

構(gòu)建體系

Windows平臺下構(gòu)建體系大致分三類:原生Visual C++梢夯、MinGW溜徙、Cygwin惊暴。下面詳細介紹著三種類型:

Visual C/C++

VisualStudio

微軟的原生C/C++編譯器實現(xiàn)黄绩,支持標(biāo)準(zhǔn)C和C++谣沸,當(dāng)然在標(biāo)準(zhǔn)C和C++基礎(chǔ)上有大量擴展。另外人乓,宇宙第一IDEVisual Studio提供了編輯勤篮、編譯、調(diào)試一體的解決方案色罚,更是給編碼提供了很多的效率提升碰缔。隨著微軟.NET戰(zhàn)略的實施,VS逐漸成為.NET開發(fā)者的必要開發(fā)工具戳护。

MinGW

MinGW

MinGW(Minimal GUN for Windows)是一款windows軟件金抡,旨在將GNU編譯工具鏈(gcc,binutil)移植到windows下,這樣可以在windows下使用gcc等工具構(gòu)建軟件腌且。

一般MinGW需要配合MSYS來用梗肝。MSYS是一個Shell的windows移植版本,附帶有一些常用的命令和工具铺董。這樣巫击,有了MSYS,連configure都可以用了精续。MSYS實際上是下面要提到的Cygwin的一個早期分支派生出來的坝锰。

MSYS2是重寫了MSYS,并引入了pacman包管理工具重付。用MSYS2可以比較方便的搭建MinGW開發(fā)環(huán)境顷级。

不過MinGW環(huán)境只是一系列編譯構(gòu)建工具的集合。對于在windows下開發(fā)程序确垫,仍然需要使用windows原生的api弓颈。換句話說拣凹,可以理解為用MinGW代替Visual C/C++。

Cygwin

cygwin

Cygwin在windows上實現(xiàn)了一層posix層恨豁,以便基于posix的程序移植到windows。因此爬迟,基于Cygwin橘蜜,可以獲得更多的linux程序,并在windows使用付呕。由于采用了中間層计福,因此運行效率相對原生的windows有些低,但是如果希望快速將linux程序移植到windows徽职,是一個不錯的選擇象颖。

Cygwin也派生出了上面提到的MSYS

在發(fā)布基于Cygwin的程序時姆钉,需要帶上cygwin1.dll说订,作為依賴。

基于Cygwin我們可以在windows上使用熟悉的git vim make gcc等軟件潮瓶,默認的終端可以讓我們繼續(xù)使用/ 而不是\作為路徑分隔符陶冷。

工具

  • Denpendency Walker: 在linux下我們用ldd來查看程序的依賴,在windows下毯辅,我們需要Denpendency Walker
  • Dumpbin: VS自帶的工具埂伦,用于查看庫的導(dǎo)入導(dǎo)出函數(shù)
  • MSDN: Man是linux最重要的文檔參考工具,而在windows下思恐,MSDN是必備的
  • 《Windows via C/C++》:此書的地位相當(dāng)于APUE
  • VS Command Line Tool:作為習(xí)慣了終端界面的linux程序員來說沾谜,可以更愿意使用編輯器+編譯器的模式,而并不喜歡使用vs的集成環(huán)境界面胀莹。那么我們需要找到VS附帶的Visual Studio命令行工具基跑,用管理員身份打開它。這個bat腳本會為我們設(shè)置必要的編譯環(huán)境變量嗜逻,然后在其中運行cl涩僻,linknmake等編譯構(gòu)建命令才能有作用栈顷。

運行庫和庫文件

windows中也有類似glibc的C運行庫逆日,以支撐C/C++編寫的程序得以運行。他們是MSVCRTxxd.dll和MSVCRTxx.dll萄凤,xx是版本號室抽,筆者見過的有MSVCRT70.dll MSVCRT80.dll MSVCRT90.dll MSVCRT100.dll等,末尾的d表示是debug版本的運行庫還是release版本的運行庫靡努。程序運行的時候究竟依賴哪個版本坪圾,取決于在編譯階段采用/MD還是/MDd編譯選項晓折。

在windows中庫文件分兩種:

  • .obj:對象文件,相當(dāng)于.o兽泄。
  • .dll:動態(tài)鏈接庫文件漓概,類似.so。程序在運行時才會加載和鏈接需要的dll病梢。windows的一個方便的地方是胃珍,dll只需要在你的exe文件所在目錄中即可。
  • .lib:靜態(tài)庫文件蜓陌,類似.a觅彰。程序在編譯時如果選擇靜態(tài)鏈接,那么.lib會用上钮热。不過并不是所有的.lib都是靜態(tài)庫文件填抬,還有一些.lib比較小,是作為.dll的導(dǎo)入庫存隧期,沒有實際的二進制代碼飒责,只是一些符號表。也就是說如果你的程序依賴一個.dll仆潮,那么在編譯階段读拆,編譯器要找到.dll相應(yīng).lib導(dǎo)入庫才能完成鏈接。而在運行時鸵闪,只需要找到dll即可檐晕。

在windows中,可執(zhí)行文件采用PE格式封裝蚌讼,相應(yīng)的辟灰,linux中采用ELF。

編寫或使用動態(tài)鏈接庫需要注意函數(shù)聲明方式篡石。VC編譯器有一組特殊的聲明:__declspec(dllexport)__declspec(dllimport)分別用于在dll中聲明為導(dǎo)出函數(shù)芥喇,和在使用dll時聲明為dll導(dǎo)入函數(shù)。這種聲明會將函數(shù)名字添加__impl_前綴凰萨,因此如果不能配對使用的話继控,往往容易出現(xiàn)鏈接錯誤。

此外胖眷,__stdcall__cdecl影響函數(shù)的入?yún)㈨樞颉?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末武通,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子珊搀,更是在濱河造成了極大的恐慌冶忱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件境析,死亡現(xiàn)場離奇詭異囚枪,居然都是意外死亡派诬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門链沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來默赂,“玉大人,你說我怎么就攤上這事括勺》趴桑” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵朝刊,是天一觀的道長。 經(jīng)常有香客問我蜈缤,道長拾氓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任底哥,我火速辦了婚禮咙鞍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趾徽。我一直安慰自己续滋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布孵奶。 她就那樣靜靜地躺著疲酌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪了袁。 梳的紋絲不亂的頭發(fā)上朗恳,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音载绿,去河邊找鬼粥诫。 笑死,一個胖子當(dāng)著我的面吹牛崭庸,可吹牛的內(nèi)容都是我干的怀浆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼怕享,長吁一口氣:“原來是場噩夢啊……” “哼执赡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起函筋,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤搀玖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驻呐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灌诅,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡芳来,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了猜拾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片即舌。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挎袜,靈堂內(nèi)的尸體忽然破棺而出顽聂,到底是詐尸還是另有隱情,我是刑警寧澤盯仪,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布紊搪,位于F島的核電站,受9級特大地震影響全景,放射性物質(zhì)發(fā)生泄漏耀石。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一爸黄、第九天 我趴在偏房一處隱蔽的房頂上張望滞伟。 院中可真熱鬧,春花似錦炕贵、人聲如沸梆奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亩钟。三九已至,卻和暖如春鳖轰,著一層夾襖步出監(jiān)牢的瞬間径荔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工脆霎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留总处,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓睛蛛,卻偏偏與公主長得像鹦马,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子忆肾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容