MinGW和Cygwin都解决了C++跨平台交叉编译的问题,使Linux下的程序在Windows上编译运行成为可能。

  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风格代码的方法:

  • 修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式,这就是MinGW的做法
  • 修改库,让window提供一个类似unix提供的库,它们对程序的接口如同unix一样,而这些库是由win32的API实现的,这就是Cygwin的做法

MinGW

  MinGW, a contraction of "Minimalist GNU for Windows", is a minimalist development environment for native Microsoft Windows applications.

  MinGW provides a complete Open Source programming tool set which is suitable for the development of native MS-Windows applications, and which do not depend on any 3rd-party C-Runtime DLLs.

  MinGW给在习惯在Linux开发的人员提供了一套在Windows上开发类似Linux的工具集,它包括一系列软件:编译工具、链接工具、转储工具、调试工具和其它开发工具等。MinGW还提供一些开源的基础支持库,像GNU的C/C++ RT库(libc、libstdc++),POSIX的基本调用界面(包括pthread),甚至还有OpenGL和Windows API的调用接口等。几乎所有MinGW中的软件都是从GNU项目或Linux下移植到Windows下的。

  与GNU不同的是,MinGW编译生成的是Windows下的可执行文件(.exe)或库文件(.dll,.lib),不过编译过程中的的中间文件仍然是.o文件,而不是.obj文件。

  MinGW的POSIX界面远没有Cygwin实现的那么全面(如:连BSD/Linux Socket都没有,只能用Winsock),所以MinGW只是用来开发Windows专属应用的工具集

  后来MinGW有了一个子项目叫:MSYS,其中包括了更多的Linux工具,其目标类似Cygwin:构建一套Windows下的Linux模拟环境。

  MSYS, a contraction of "Minimal SYStem", is a Bourne Shell command line interpreter system. Offered as an alternative to Microsoft's cmd.exe, this provides a general purpose command line environment, which is particularly suited to use with MinGW, for porting of many Open Source applications to the MS-Windows platform; a light-weight fork of Cygwin-1.3, it includes a small selection of Unix tools, chosen to facilitate that objective.

  注:MinGW官网:http://www.mingw.org/

Cygwin

  Cygwin is:

  • a large collection of GNU and Open Source tools which provide functionality similar to a Linux distributionon Windows.
  • a DLL (cygwin1.dll) which provides substantial POSIX API functionality.

  Cygwin 名字来源于GNU、Cygnus、Windows三者的缩写。Cygwin的目标是:构建一套Windows下的Linux模拟环境。因此,Cygwin是一个庞大的项目,不只包括Linux下的开发环境,也包括工作环境和各种各样的Linux下的软件。

  在早期,Cygwin的核心是cygwin1.dll,可以认为它是一个POSIX界面的实现,依靠这个动态链接库,Unix/Linux下的软件可以很容易的移植到Windows下,并且风格保持原有的不变。不过,随着Cygwin的发展,越来越多的Unix/Linux程序的移植,建立基于Cygwin的复杂程序依赖的库也越来越多,现在装完默认配置的Cygwin后,就会发现有很多cyg打头的动态链接库。

注:

  Cygwin官网:http://www.cygwin.com/

  Cygwin中文网:http://www.cygwin.cn/

GnuWin32

  GnuWin32使windows用户可以在命令行窗口中使用各种各样的linux命令,就跟使用普通的windows命令一样简单。

  注:GnuWin32官网:http://gnuwin32.sourceforge.net/

CMake

  CMake is an open-source, cross-platform family of tools designed to build, test and package software.

  官网:https://cmake.org/

Cross-platform Tools的更多相关文章

  1. Android sdk platform,sdk tools,sdk Build tools,sdk platform tools 的关系

    1. sdk platform 简单理解为系统版本 最新级别: 28:Android 9 27:Android 8.1 26:Android 8.0 25:Android 7.1 24:Android ...

  2. “CMake”这个名字是“cross platform make”

    cmake_百度百科 https://baike.baidu.com/item/cmake/7138032?fr=aladdin CMake 可以编译源代码.制作程序库.产生适配器(wrapper). ...

  3. Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development

    Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development If you are consi ...

  4. V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1)

    V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245. ...

  5. Gtest:Using visual studio 2017 cross platform feature to compile code remotely

    参考:使用Visual Studio 2017作为Linux C++开发工具 前言 最近在学Gtest单元测试框架,由于平时都是使用Source Insight写代码,遇到问题自己还是要到Linux下 ...

  6. Cross Platform Note: STD C++ Preprocessor directives & pre-defined macros

    ref: http://www.cplusplus.com/doc/tutorial/preprocessor/ concolusion: directives: #define #undef #in ...

  7. Cross platform

    值得学习的C/C++语言开源项目 (1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html ...

  8. Cross platform GUI for creating SSL certs with OpenSSL

    Someone said: from : https://micksmix.wordpress.com/2012/08/09/xca-cross-platform-gui-for-creating-s ...

  9. Deepin personalized transplantation of kali platform tools

    首先配置更新源: 把kali的源添加到 Deepin 自带的源后面: 简易换源方法: 1.打开文件管理 -> 地址栏输入路径:/etc/apt/ 然后回车->在目录中右键以管理员身份打开 ...

  10. .NET: 谈谈共享项目 (Shared Project) 的使用

    从 Visual Studio 2015 起,共享项目 (Shared Project) 作为新的一种项目类型被添加到项目模板列表中,它的主要目的是使多个不同类型的项目之间可以共享代码或资源.相比它的 ...

随机推荐

  1. CAP与Base理论

    分布一致性的提出 在分布式系统中要解决的一个重要问题就是数据的复制.在我们的日常开发经验中,相信很多开发人员都遇到过这样的问题:假设客户端C1将系统中的一个值K由V1更新为V2,但客户端C2无法立即读 ...

  2. SSH 登录时出现如下错误:Disconnected:No supported authentication methods available

    SSH 登录时出现如下错误:Disconnected:No supported authentication methods available 更新时间:2017-06-07 13:26:11   ...

  3. 递归算法结合数据库 解析 java树形结构

    1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHAR2(50), PID NUMBER //父节 ...

  4. SpringBoot 热启动

    在开发过程中,当写完一个功能我们需要运行应用程序测试,可能这个小功能中存在多个小bug,我们需要改正后重启服务器,这无形之中拖慢了开发的速度增加了开发时间,SpringBoot提供了spring-bo ...

  5. TCP的状态转移

    状态转移图 状态分析 客户端 CLOSED 初始状态 调用connect将发起主动打开,发送SYN J到服务端,进入SYN_SENT状态. SYN_SENT 客户端已经发送SYN报文 接收到服务端发回 ...

  6. GreenDao3.0简单使用(转)

    关于GreenDao greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案. 关于greenDAO的概念可以看官网greenDAO greenDAO 优势 1.一个精简的 ...

  7. C# sqlserver ExecuteNonQuery()方法详解

    关于ExecuteNonQuery() 方法以前对这个一直都没在意,基本上都没有用其返回值,查了一下MSDN,如下:SqlCommand.ExecuteNonQuery 方法对连接执行 Transac ...

  8. 设置获取cookie,setCookie,getCookie

    设置cookie: function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getT ...

  9. 160. Intersection of Two Linked Lists (List;Two-Pointers)

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  10. LAB3 整数相加

    //yuec2 Yue Cheng package lab3; public class Fraction { int numerator; int denominator; //obeject wi ...