使用cygwin移植Linux的项目到Windows下之总结(转)

 
一、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里面加上参数运行,是不是成功了?

使用cygwin移植Linux的项目到Windows下之总结(转)的更多相关文章

  1. Linux如何下解压windows下的.zip和.rar文件

    Linux自带的unzip命令可以解压windows下的zip格式的压缩文件. 如何unzip没安装,可以yum 安装下: yum -y install unzip unzip命令 语法:unzip ...

  2. 开源项目:windows下使用MinGW+msys编译ffmpeg

    本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但 ...

  3. linux mint 19 打开 Windows 下制作的 TXT 文件时‘乱码’

    因为 Linux 采用的是 UTF-8 编码,Windows 的中文编码是 GB18030. 解决的办法:让 Linux 的文本编辑器支持 GB18030 1.我们安装一个小软件"Dconf ...

  4. python项目在windows下运行出现编码错误的解法

    在启动文件里面加入 import sysreload(sys) sys.setdefaultencoding('GB2312') 这样在windows下调试运行神马的,就不会报错了. 当然发布时,建议 ...

  5. 忽然有一种感觉:云存储必须从系统级定制,所以必须对Linux相当熟悉。Windows下开发软件的模式已经过时了

    看了诸多招聘帖子以后的感觉- 工作内容: .存储相关产品的设计.开发和维护. .Linux系统应用程序研发. .主流Linux内核文件系统研发. .自动化测试框架和工具的研发. 职位要求: .计算机相 ...

  6. 清华申请退学博士作品:完全用Linux工作,凸Windows

    清华申请退学博士作品:完全用Linux工作 按尽管我们已经不习惯看长篇大论, 但我还是要说, 这是一篇值得你从头读到尾的长篇文章. 2005年9月22日,清华在读博士生王垠在水木社区BLOG上发表了& ...

  7. 完全用Linux工作,抛弃windows

    录一篇旧文 作者:王垠 完全用Linux工作,抛弃windows 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Linux 不是每个人都想用的.如果 ...

  8. 全然用linux工作,放弃windows

    按: 虽然我们已经不习惯看长篇大论, 但我还是要说, 这是一篇值得你从头读到尾的长篇文章. 2005年9月22日,清华在读博士生王垠在水木社区BLOG上发表了<清华梦的粉碎--写给清华大学的退学 ...

  9. [转自王垠]完全用GNU/Linux工作,摈弃Windows低效率的工作方式

    ZT (a qinghua student's article) 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Linux 不是每个人都想用的.如果 ...

随机推荐

  1. Update 语句用于修改表中的数据。

    语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

  2. php -- instanceof、class_exists、insterface_exists、method_exists、get_class、get_parent_class

    class_exists:类是否存在 在创建对象之前判断类是否存在,如果不存在就应该先加载类,再创建对象,容错. interface_exists:接口是否存在 method_exists:方法是否存 ...

  3. Sqlite - constraint failed[0x1555]: UNIQUE constraint failed

    执行插入操作时,出现异常constraint failed[0x1555]: UNIQUE constraint failed 意思是:sqlite 唯一约束失败 定位于某个表字段上,该字段是表的主键 ...

  4. iOS开发之 -- CocoPods的安装和使用

    以前项目中使用过Pods 1.0,最近项目中也有用到,因为很长时间没用了,所以配置了下,谁知道,中间出现了不少坑,特记录在此博客,其实pods的使用也就是几个终端命令而已,可能随着系统的升级,以前的终 ...

  5. ionic ngRepeat追加数据(加载更多,不需要重复渲染dom数据)

    1)模版循环在之前的随笔中已经说过,使用挺简单的 http://www.cnblogs.com/tujia/p/6078217.html 简单来说就是控制器输入一个数据变量,模版里用ng-repeat ...

  6. 『SharePoint 2010』Sharepoint 2010 Form 身份认证的实现(基于AD)

    一.进管理中心,创建一个应用程序,配置如下: 二.填端口号,和选择form身份认证,以及填写成员和角色,其他都默认就可以了 三.使用SharePoint 2010 Management Shell在里 ...

  7. 170413、怎么精确理解leader布置的任务(技术外的话)

    [缘起] 和一个同学交代了一个很重要的事情,结果执行的结果并不是自己想要的,微微生气之余,简单的聊聊“如何精确的理解leader布置的任务”. [员工角度的潜在困惑] 1)leader讲了很多,脑子记 ...

  8. Oracle的存储过程编程

    是一个可以用编程的方式来操作SQL的集合. | |目录 1什么是存储过程? 2存储过程的优点? 3存储过程的缺点? 4存储过程的用途? 5存储过程注意事项? 6如何写存储过程? 7如何执行存储过程? ...

  9. ZOJ 3715 Kindergarten Election

    At the beginning of the semester in kindergarten, the n little kids (indexed from 1 to n, for conven ...

  10. windows10子系统配置vim

    .cmd背景,字体等配置 (1)设置背景颜色44 50 59 (2)设置字体 大小 颜色 Courier New 20 白色 2.ubuntuvim配置(etc/vim/vimrc):(1)配置vim ...