使用cygwin移植Linux的項目到Windows下之總結
關鍵字: cygwin,MinGW,移植,Linux,Windows
1、why
接到一個任務,把公司的某個在Linux下開發的項目(也就是一個程序啦)移植到Windows下,使得其能夠在Windows下運行,而且運行的結果固然要是正確的啦,何謂正確,固然就是和Linux運行結果比對,同樣就行。
2、難在何處
難就難在如何在Windows下編譯經過。假設你在Linux下開發了一個這樣的程序:
#include<stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
那我表示移植Windows下毫無壓力,由於此程序中並無使用Linux獨有的API。可是當你的程序中使用了Linux獨有的API時,那移植起來就有不少工做量了。
3、基本思想
作最壞的打算,你的程序裏面用了不少Linux獨有的API(其實你也不能說全哪些是Linux獨有的API),而後移植到Windows下,編譯的時候報錯:找不到xxx.h的頭文件,很明顯此xxx.h頭文件在Windows中是沒有的,進而該頭文件中聲明的某些函數也是Windows沒有的,或者Windows下相似的API不是放在這個頭文件中聲明的。
此時,你考慮註釋掉這個#include<xxx.h>,接下來再編譯,不出意外應該是報錯:某某函數未定義。那麼這下就找到了xxx.h中被引用的函數了。因而下一步,你應該考慮是否Windows下有相對應的函數來完成相似的工做,若是你對Windows不熟,很差意思,只能上網查啦。MSDN是個好去處。
假設你找到了Windows下對應的函數,嘗試更換#include<xxx.h>,改爲#include<yyy.h>(yyy.h是Windows下對應的那個API的聲明頭文件),而後下面調用的地方也相應的作些小修改。而後再驗證結果是否正確。
假設你找不到Windows下對應的函數,很差意思,你杯具了。你得本身或者從網上找資料來用Windows的環境來構造一個新的API,狀況通常會很麻煩,通常會讓人感到沮喪。
4、新的但願
讓咱們停下來想一想,Linux下有這麼多好用的東西,不少東西人們都想移植到Windows下,只是你一我的碰到這個問題嗎?答案是否認的,已經有無數的人們遇到這個問題了。或許你又在想,有沒有一種工具,利用Windows的一些函數來實現Linux獨有的API嗎?恭喜你,真有!
下面請cygwin隆重出場。
5、什麼是cygwin
與其我在這介紹cygwin是什麼,還不如直接看一下百科全書,固然啦,不是百度百科,是wiki百科。http://zh.wikipedia.org/wiki/Cygwin
6、cygwin怎麼用
這就是重點了,下面說說使用過程吧,親測。
下載cygwin,安裝cygwin,這個就很少說了。。。ps:在安裝cygwin的時候,若是不懂的話就全選了,可是代價是起碼10G+的硬盤空間,並且不知道要裝多久,我掛了兩天機。
安裝完以後,記得把C:\cygwin\bin添加到環境變量PATH中去,而後就啓動cygwin,看到一個shell界面(小黑框),而後把項目放到/home/michael下,而後進入到對應的目錄,make。很神奇,就這樣經過了。。。而後最好是把Makefile的TARGET改爲xxx.exe,而後你試試,把xxx.exe拖出來雙擊運行或者放cmd裏面加上參數運行,是否是成功了?