windows下的linux开发环境Mingw与Cygwin
2014-01-30 15:37
267 查看
minGW给那些习惯于在Linux上开发的人员,在windows上提供了一套类似的工具集。
cygwin主要是对于再Linux的程序,无需改动代码即可移植到windows上。
gnuwin32主要是对习惯linux工具的人员,在windows上提供一套类似的命令。
Unix下编译通过的C代码,在win32下编译是不能通过的 ,当然Unix 和win32的API都是符合标准C,也就是说,大多数函数调用在unix和win32下是相同的.但是,unix有自己一些独特的API(如fork,spawn,signals,select,sockets等),如果代码中使用了这些API,在win32下当然找不到对应的库。
但是,这些API的功能在win32中也能实现,也许你已经发现了一个能让window编译Unix风格代码的方法:
1.修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式--这就是mingw的做法.
2.修改库,让window提供一个类似unix提供的库,他们对程序的接口如同unix一样,而这些库,当然是由win32的API实现的--这就是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了。
用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对应的实现,来把结果返回给程序。
可以用查看他们编译好的程序的导入表来验证这点。
cygwin主要是对于再Linux的程序,无需改动代码即可移植到windows上。
gnuwin32主要是对习惯linux工具的人员,在windows上提供一套类似的命令。
Unix下编译通过的C代码,在win32下编译是不能通过的 ,当然Unix 和win32的API都是符合标准C,也就是说,大多数函数调用在unix和win32下是相同的.但是,unix有自己一些独特的API(如fork,spawn,signals,select,sockets等),如果代码中使用了这些API,在win32下当然找不到对应的库。
但是,这些API的功能在win32中也能实现,也许你已经发现了一个能让window编译Unix风格代码的方法:
1.修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式--这就是mingw的做法.
2.修改库,让window提供一个类似unix提供的库,他们对程序的接口如同unix一样,而这些库,当然是由win32的API实现的--这就是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了。
用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下的linux开发环境Cygwin的安装配置
- Windows下的linux开发环境Cygwin的安装配置
- Windows下Linux开发环境设置(二)--安装Cygwin及交叉编译工具链
- Windows下Linux开发环境设置--安装Cygwin及交叉编译工具链
- Windows下Linux开发环境设置(二)--安装Cygwin及交叉编译工具链
- gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)
- Windows下的Linux开发环境 Cygwin
- windows上搭建linux开发环境
- Linux 开发中的常用命令 ( Cygwin 环境也同样适用)
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- 如何在微软Windows平台上打造出你的Linux开发环境(转载)
- 在Linux下和windows下配置apache+php+mysql 开发环境和Zend Studio+Aptana Studio 的IDE
- 【Android】android ndk r8+cygwin开发环境搭建(windows环境下)
- [z]Windows 下基于 Eclipse 的可视化远程 Linux C/C++ 开发环境搭建
- 深入体验bash on windows!在windows上搭建原生的linux开发环境环境
- Windows下NDK开发环境的搭建(Cygwin+Android-SDK+NDK)
- Windows使用MinGW搭建C/C++开发环境
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
- windows下的Code::Blocks + minGW + wxWidgets 开发环境搭建
- GTK+学习:概述 、搭建环境(Windows,Linux)、开发 收藏