使用cygwin移植Linux的项目到Windows下之总结(转)
原文 http://my.oschina.net/michaelyuanyuan/blog/68615?p=1
一、why
接到一个任务,把公司的某个在Linux下开发的项目(也就是一个程序啦)移植到Windows下,使得其可以在Windows下运行,并且运行的结果当然要是正确的啦,何谓正确,当然就是和Linux运行结果比对,一样就行。
二、难在何处
难就难在如何在Windows下编译通过。假设你在Linux下开发了一个这样的程序:
#include<stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
那我表示移植Windows下毫无压力,因为此程序中并没有使用Linux独有的API。但是当你的程序中使用了Linux独有的API时,那移植起来就有很多工作量了。
三、基本思想
做最坏的打算,你的程序里面用了很多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,情况一般会很麻烦,一般会让人感到沮丧。
四、新的希望
让我们停下来想想,Linux下有这么多好用的东西,很多东西人们都想移植到Windows下,只是你一个人碰到这个问题吗?答案是否定的,已经有无数的人们遇到这个问题了。或许你又在想,有没有一种工具,利用Windows的一些函数来实现Linux独有的API吗?恭喜你,真有!
下面请cygwin隆重出场。
五、什么是cygwin
与其我在这介绍cygwin是什么,还不如直接看一下百科全书,当然啦,不是百度百科,是wiki百科。http://zh.wikipedia.org/wiki/Cygwin
六、cygwin怎么用
这就是重点了,下面说说使用过程吧,亲测。
下载cygwin,安装cygwin,这个就不多说了。。。ps:在安装cygwin的时候,如果不懂的话就全选了,但是代价是起码10G+的硬盘空间,而且不知道要装多久,我挂了两天机。
安装完之后,记得把C:\cygwin\bin添加到环境变量PATH中去,然后就启动cygwin,看到一个shell界面(小黑框),然后把项目放到/home/michael下,然后进入到对应的目录,make。很神奇,就这样通过了。。。然后最好是把Makefile的TARGET改成xxx.exe,然后你试试,把xxx.exe拖出来双击运行或者放cmd里面加上参数运行,是不是成功了?