图片 5

1)作为Linux/Unix的初学者,我能否在系统上运行二进制文件

Cygwin 3.1.0 发布了,Cygwin是广大自由软件的会集,最早由Cygnus
Solutions开拓,用于各样版本的Microsoft
Windows上,运营UNIX类系统。Cygwin的基本点指标是因此重复编写翻译,将POSIX系统(比方Linux、BSD,以致其余Unix系统)上的软件移植到Windows上。Cygwin移植专门的学业在Windows
NT、Windows 二零零二、Windows XP以致Windows Server 2002上相比较好,在Windows
95和Windows 98上,绝对差劲一些。近些日子Cygwin由Red Hat等担任维护。

自家想让本身的C ++项目跨平台,作者正在思量使用Cygwin / MinGW。
可是她们中间有哪些界别吧?

一 cygwin
Cygwin 是四个用于 Microsoft® Windows® 操作系统的类 UNIX®
景况。它包蕴多少个确实的 UNIX shell、三个 Portable Operating System
Interface (POSIX卡塔尔(قطر‎ 模拟库以致数千个 UNIX 实用程序。

C/C++编写翻译器的一对易混淆概念,总括一下。

(搬运自己在SegmentFault的博客)

新本子包含:

另叁个标题是,若无Cygwin / MinGW,笔者能不可能在系统上运转二进制文件?

作用:
1)作为Linux/Unix的初学者,可以接纳cygwin来在windows上模仿使用Linux/Unix;
2)能够依据cygwin来从windows访谈Linux/Unix;
3)能够在Windows上效仿Linux的成本意况,例如动用GUN的编写翻译和调试工具来做程序支付;
4)能够依靠cygwin中间层完成Linux/Unix应用程序到windows的无代码更正的移植;(cygwin
dll达成了对windows底层API的Linux/Unix风格的包裹)
5)注意,cygwin中运作的Linux/Unix工具其实是那些工具的附和的windows的exe版本,cygwin不能一直运营Linux/Unix的应用程序;

关于如何是Unix-like操作系统,管见所及操作系统间隔绝,什么是操作系统接口等等,请参见《操作系统宝鉴》。

Cygwin 是三个用来 Windows 的类 UNIX shell 境况。
它由五个构件组成:叁个 UNIX API 库,它模拟 UNIX
操作系统提供的累累特色;以致 Bash shell 的改写版本和多数 UNIX
实用程序,它们提供大家潜濡默化的 UNIX 命令行分界面。前一个构件是多少个 Windows
动态链接库 (DLLState of Qatar。后三个组件是一组借助 Cygwin DLL
的次第,在那之中好些个是用未经校订的 UNIX
源代码编写翻译的。它们合在一齐提供大家耳闻则诵的 UNIX 蒙受。

* cygwin-3.1.0-1
* cygwin-devel-3.1.0-1
* cygwin-doc-3.1.0-1

 Answers


Cygwin是尝尝在Windows上创设叁个平安无事的UNIX / POSIX情状。
要变成那或多或少,它使用各样DLL。 尽管那一个DLL被GPLv3
+覆盖,不过它们的许可证包罗一个丰盛 ,不会强迫派生的做事被GPLv3
+覆盖。 MinGW是二个C / C
++编写翻译器套件,它同意你创设Windows可实践文件而不依据于于那样的DLL –
您只需求普通的MSVC运转时,那是Microsoft Windows平时安装的一有的。

你也可以获取多个小的UNIX /
POSIX碰到,用MinGW编写翻译成MSYS 。
它从不Cygwin的保有机能,但对于想要使用MinGW的程序员来讲是老大精良的。

用作一个简化,便是如此的:

  • 在Cygwin中编写翻译一些事物,然后编译Cygwin 。

  • 编写翻译MinGW中的东西,你正在为Windows编译它。

关于Cygwin

Cygwin的指标是透过模拟多数基于Unix的操作系统提供的小细节,并由此POSIX正式来记录,使得基于nix的应用程序更便于移植到Windows上。
假诺你的应用程序假定它能够动用Unix作用,比方管道,Unix风格的公文和目录访谈等等,那么你能够在Cygwin中编写翻译它,而Cygwin自己将用作你的应用程序的兼容层 ,那个特定于Unix的楷模可以持续选拔,对应用程序实行少之甚少或无需改过。

倘令你想为Cygwin编写翻译一些东西并散发这些应用程序,那么您还必需将Cygwin运维时情状(由cygwin1.dll提供)与它一起cygwin1.dll , 那对您或者接纳哪一类档次的软件许可有影响 。

关于MinGW

MinGW是GNU编写翻译器工具的Windows端口,举例GCC,Make,Bash等等。
它不会试图仿照或提供与Unix的一应俱全宽容性,而是提供在Windows上动用GCC(GNU编写翻译器)和一点点任何工具的最低须求意况。
它未有像Cygwin相近的Unix仿真层,不过结果是您的应用程序必要专门的编制程序手艺在Windows上运转,那或然代表一旦它被创制为依附于在标准Unix蒙受中运营,使用Unix特有的效果与利益,比方后边提到的意义。
默许境况下,在MinGW的GCC中编写翻译的代码将编写翻译为本机Windows
X86对象,富含.exe和.dll文件,不过也能够选择科学的装置进行交叉编写翻译。
MinGW是Microsoft Visual C
++编译器及其涉及的链接/制作工具的开源代替品。

主页:

 

何况,MinGW这几个项目也在做相通的作业。MinGW是Minimalistic GNU for
Windows的缩写。MinGW有一个叫MSYS(Minimal
SYStem)的子项目,首假诺提供了几个模仿Linux的Shell和某些骨干的Linux工具。

该版本包蕴部分新特点和 bug 修复,首要有:

存在相当复杂的跨平台框架,那使得将动用轻巧移植到各类操作系统的职务成为可能

例如Qt框架卡塔尔是跨平台运用的风靡框架。
借让你从一开头就利用那样的框架,那么您不仅可以够减掉在移植到其它平台时遇上的难为,并且能够在有着平台上利用相仿的图形窗口小构件(窗口,菜单和控件)
GUI应用程序。

要增多到其余答案,Cygwin附带MinGW库和标题,您能够由此选用-mno-cygwin标识与gcc编写翻译而不链接到cygwin1.dll。
笔者非凡中意使用轻巧的MinGW和MSYS。

维基百科在这里做叁个相比。

从Cygwin的网站 :

  • Cygwin是八个看似于Linux的Linux情状。
    它由两局地构成:二个DLL(cygwin1.dll),当做Linux
    API仿真层,提供大量的Linux API作用。
  • 提供Linux外观的一有滋有味工具。

从Mingw的网站 :

MinGW(简单的称呼“GNU for
Windows”)是一个可无偿获得并可随便分发的Windows特定头文件和导入库的集合,与GNU工具集相结合,能够生成不相信任任何第三方C运维时DLL的本地Windows程序

Cygwin使用DLL,cygwin.dll(恐怕一组DLL)在Windows上提供相近于POSIX的周转时。

MinGW编写翻译为本机Win32应用程序。

假诺您用Cygwin构建一些东西,你安装它的其余系统也将须要Cygwin DLL。
MinGW应用程序无需其它特殊的周转时。

开卷那么些回应的难点,领会Cygwin和MinGW之间的区分。

主题素材1:小编想创建四个自己编写源代码的应用程序,编写翻译一次并在别的平台(举个例子Windows,Linux和Mac
OS X …)中运作它。

解答#1:用JAVA写你的源代码。 编译一回源代码并在别的省方运作。

标题2:笔者想创造贰个自家编写源代码的应用程序,但不曾其它难点,小编得以独家编写翻译任何平台的源代码(举例Windows,Linux和Mac
OS X …)。

答案2:用C或C ++写你的源代码。 只使用规范头文件。
为别的平台应用相当的编写翻译器(比如Windows的Visual
Studio,Linux的GCC和Mac的XCode)。
请注意,您不应有运用其它高端编制程序效用在具有平台上打响编写翻译您的源代码。
假若你不使用C或C ++标准类或函数,则您的源代码不可能在别的平台中编写翻译。

标题#3:在难题#2的答应中,各类平台都难以使用分化的编写翻译器,有未有跨平台的编写翻译器?

答案3:是的,使用GCC编写翻译器。 那是二个跨平台的编写翻译器。
要在Windows中编写翻译源代码,请使用为Windows提供GCC编写翻译器的MinGW ,并将源代码编写翻译为本机Windows程序。
不要使用此外高端编制程序成效(如Windows API)在全数平台上得逞编写翻译源代码。
假使您使用Windows API函数,则您的源代码不会在此外平新竹编写翻译。

难题4:C或C ++标准头文件不提供其余高级编制程序功用,如八线程。 作者能做什么样?

答案4:您应该运用POSIX(便携式操作系统接口[用于UNIX])规范。
它提供了比比较多尖端编制程序功效和工具。
多数操作系统完全或局地POSIX包容(如Mac OS X,Solaris,BSD /
OS和…)。
一些操作系统,就算尚无正规认证为POSIX包容,相当大程度上相符(如Linux,FreeBSD,OpenSolaris和…)。 Cygwin为Microsoft
Windows提供了一个骨干符合POSIX标准的开垦和平运动行条件。

从而:

二 cygwin的安装
Cygwin 是八个用来 Windows 的类 UNIX shell 情况。 它由多个零器件组成:三个UNIX API 库,它模拟 UNIX 操作系统提供的多多特点;以致 Bash shell
的改写版本和不菲 UNIX 实用程序,它们提供大家熟知的 UNIX
命令行分界面。前多少个零部件是三个 Windows 动态链接库
(DLL卡塔尔。后三个组件是一组依据 Cygwin DLL 的主次,个中不菲是用未经纠正的
UNIX 源代码编写翻译的。它们合在一齐提供我们熟练的 UNIX 情况。

C/C++编写翻译器有啥?

 

先是是红得发紫的这几人老兄,MSVC、GCC、Cygwin、MingW(Cygwin和MingW的Republika Hrvatska语发音),其余还有个别小众和新锐,像ICC(英特尔C/C++ Compiler)、BCC(Borland C/C++ Compiler,快化为泡影了)、瑞鹰VCT(ARM的汇编/C/C++编写翻译器,内置在ARM的IDE——RVDS中)、Pgi编写翻译器……其实有一大串,我们只要纯熟常用的最有力的三款就能够了。

 

 

那篇文章提出了双边的分化,学习一下:

- Add 24 bit color support using xterm compatibility mode in Windows 10
  1703 or later.  Add fake 24 bit color support for legacy console,
  which uses the nearest color from 16 system colors.

- Support pseudo console in PTY. Pseudo console is a new feature
  in Windows 10 1809, which provides console APIs on virtual
  terminal. With this patch, native console applications can work
  in PTYs such as mintty, ssh, gnu screen or tmux.

- New APIs: sched_getaffinity, sched_setaffinity, pthread_getaffinity_np,
  pthread_setaffinity_np, plus CPU_SET macros.

- New APIs: dbm_clearerr, dbm_close, dbm_delete, dbm_dirfno, dbm_error,
  dbm_fetch, dbm_firstkey, dbm_nextkey, dbm_open, dbm_store.


What changed:
-------------

- FIFOs can now be opened multiple times for writing.
  Addresses: https://cygwin.com/ml/cygwin/2015-03/msg00047.html
             https://cygwin.com/ml/cygwin/2015-12/msg00311.html

- If a SA_SIGINFO signal handler changes the ucontext_t pointed to by
  the third parameter, follow it after returning from the handler.

- Eliminate a header file name collision with <X11/XLocale.h> on case
  insensitive filesystems by reverting <xlocale.h> back to <sys/_locale.h>.

- Allow times(2) to have a NULL argument, as on Linux.
  Addresses: https://cygwin.com/ml/cygwin/2019-09/msg00141.html

- Improve /proc/cpuinfo output and align more closely with Linux.

- Raise stackdump frame limit from 16 to 32.
  Addresses: https://cygwin.com/ml/cygwin/2019-11/msg00038.html


Bug Fixes
---------

- Fix select() on console in canonical mode.  Return after one line is
  completed, instead of when only one key is typed.

- Make console I/O functions thread-safe.

- Define missing MSG_EOR.  It's unsupported by the underlying Winsock
  layer so using it in send(2), sendto(2), or sendmsg(2) will return -1
  with errno set to EOPNOTSUPP and recvmsg(2) will never return it.

- Fix a timerfd deadlock.
  Addresses: https://cygwin.com/ml/cygwin/2019-06/msg00096.html

- Fix sigpending() incorrectly returning signals for unrelated threads.
  Addresses: https://cygwin.com/ml/cygwin/2019-07/msg00051.html

- Fix a hang when opening a FIFO with O_PATH.
  Addresses: https://cygwin.com/ml/cygwin-developers/2019-06/msg00001.html

- Don't append ".lnk" when renaming a socket file.
  Addresses: https://cygwin.com/ml/cygwin/2019-07/msg00139.html

- Make tcsetpgrp() return -1 if its argument is negative.
  Addresses: https://cygwin.com/ml/cygwin/2019-07/msg00166.html

- Avoid mistakenly moving a process under debugger control into the
  process group of the debugger.
  Addresses a problem visible in GDB 8.1.1, related to
  https://cygwin.com/ml/cygwin/2019-07/msg00166.html

- Return ENOEXEC from execve for arbitrary files only if the files are
  executable.
  Addresses: https://cygwin.com/ml/cygwin/2019-08/msg00054.html

- Fix off-by-one in environment evaluation leading to an abort.
  Addresses: https://cygwin.com/ml/cygwin-patches/2019-q3/msg00069.html

- Make output of /proc/[PID]/stat consistent with getpriority().
  Addresses: https://cygwin.com/ml/cygwin/2019-08/msg00082.html

- 64 bit only: Avoid collisions between memory maps created with shmat
  and Windows datastructures during fork.
  Addresses: https://cygwin.com/ml/cygwin/2019-08/msg00107.html

- Make rmdir fail if its argument is a symlink.
  Addresses: https://cygwin.com/ml/cygwin/2019-09/msg00221.html

- Fix an assertion failure on an invalid path.
  Addresses: https://cygwin.com/ml/cygwin/2019-09/msg00228.html

- If the argument to mkdir(2) or rmdir(2) is 'x:\', don't strip the
  trailing backslash.
  Addresses: https://cygwin.com/ml/cygwin/2019-08/msg00334.html

- Make spawnvp, spawnvpe fail if the executable is not in $PATH.
  Addresses: https://cygwin.com/ml/cygwin/2019-10/msg00032.html

- Fix parent/child relationship after parent dies.
  Addresses: https://cygwin.com/ml/cygwin/2019-09/msg00263.html

- Fix a security problem if Cygwin is installed into a path
  with spaces in it.
  Addresses: https://cygwin.com/ml/cygwin/2019-11/msg00018.html

- Fix an assertion failure when /cygdrive contains an offline network
  drive.
  Addresses: https://cygwin.com/ml/cygwin/2019-12/msg00016.html

- Fix return value of ilogbl for 0 input.
  Addresses: https://cygwin.com/ml/cygwin/2019-12/msg00074.html

- Let strtold set errno to ERANGE on underflow per POSIX.
  Addresses: https://cygwin.com/ml/cygwin/2019-12/msg00072.html

要在Windows中使用GCC跨平台编写翻译器的优势,请使用MinGW。

Cygwin使用安装向导程序setup.exe来完毕cygwin的在线安装。
同时setup.exe文件能够重新安装软件,能够增添、改善或升官 Cygwin
配置的机件。

主流C/C++编写翻译器|编写翻译遇到简要介绍

 

MSVC

MSVC是微软Windows平台Visual Studio自带的C/C++编译器。

优点:对Windows平台辅助好,编写翻译快。

缺点:对C++的新标准援助得少。

 

 

GCC

GCC原名GNU C
Compiler,后来渐渐支持越来越多的言语编写翻译(C++、Fortran、帕斯Carl、Objective-C、Java、Ada、Go等),所以产生了GNU
Compiler
Collection(GNU编写翻译器套装),是一套由GNU工程支出的支撑多种编制程序语言的编写翻译器。GCC是自由软件发展历程中的著名例子,由自由软件基金会以GPL左券公布,是半数以上类Unix(如Linux、BSD、Mac
OS
X等)的正经八百编写翻译器,而且适用于Windows(依靠任何移植项目落实的,举例MingW、Cygwin等)。GCC帮衬几种Computer连串晶片,如x86、ARM,并已移植到其余二种硬件平台。

优点:类Unix下的专门的工作编写翻译器,补助广大语言,援助交叉编写翻译。

缺点:暗中认可不协助Windows,要求第三方移植才可用于Windows。

 

 

Cygwin

Cygwin是一个Windows下Unix-like模拟条件,具体说正是Unix-like接口(OS
API,命令行)重定向层,其目标是不改变越来越软件源码仅重新编写翻译就能够将Unix-like系统上的软件移植到Windows上(这些移植恐怕还算不得严俊意义上的无缝移植)。始于1994年,最早作为Cygnus软件公司工程师SteveChamberlain的三个等级次序。

和GCC的关系:Cygwin是让Windows具备Unix-like境况的软件并非编写翻译器,GCC是设置在Cygwin上的编写翻译器。

优点:能够比MingW移植越来越多的软件到Windows上,对Linux接口模拟比MingW周详。

缺点:软件运营依赖cygwin1.dll,速度受点影响。

 注意:Unix-like模拟条件不是Unix设想遇到,比较多演讲中都声称Cygwin是在Windows上尽量模拟类Unix情形,那便于产生误解,好像类Unix的elf程序能够直接运维在装置了Cygwin的Windows上一致。Cygwin和Wine的笔触是例外的。在Windows+Cygwin上你能够像类Unix那样选用命令行和编制程序,但elf等非exe格式的次第是无法被Cygwin运维的,所以Cygwin和Unix虚拟机、Wine是一丝一毫两样的,叫Unix-like情状,模拟非虚构,是轻松的选拔性的模仿,请不要误会。

 

MingW

MingW(Minimalist GNU on
Windows)是多个Linux/Windows下的能够把软件源码中Unix-like OS
API调用通过头文件翻译替换来相应的Windows
API调用的编写翻译境况,其目标和Cygwin相近。进而把Linux上的软件在不改善源码的事态下编写翻译为可直接在Win下进行的exe。

和GCC的关系:MingW是编写翻译情状,不是编写翻译器,GCC是MingW中的主题组成。

优点:在Win下能够和Linux相仿的章程编译C/C++源码,能够说是Win版的GCC,其生产的Windows
PE程序比较Cygwin不依赖任何第三方库,比Cygwin纯粹,理论上也更敏捷。

缺点:编写翻译速度、编写翻译出的程序在算法上大概都比MSVC慢。

注意:与Windows下其余编译器分裂的是,MinGW与Linux下大范围利用的GNU近乎完全协作,那意味,在Linux下怎么编写翻译源代码,在MinGW中也得以以完全相通的章程编译。有个别Linux下的开垦职员(举例开源阵营)公布的源代码日常只提供Linux下的编写翻译格局,而不提供Windows下的编写翻译格局(那只怕与其素不相识windows操作系统有关),但确确实实有成都百货上千顾客须求在在Windows下编写翻译使用此源代码。那在种境况下,如若Windows客商想用VC、BC等编写翻译器编写翻译该源代码,必得重写Makefile(各样编写翻译器所支撑的Makefile不尽相仿),专业量一点都不小不说,还很难保障不不可信。MinGW的现身,提供了多少个平台下的“跨平台编写翻译方案”。MinGW与MSYS相称合,连./configure都有了。与GNU不一致的是,MinGW编写翻译生成的是Windows下的可试行文件(.exe)或库文件(.dll,.lib)——不过编写翻译进度中的的中档文件仍为.o文件,而不是.obj文件(那本来不在乎了,中间文件嘛,编写翻译完毕后就从没有过用了)。

 

 

在我们相比Cygwin和MingW早先,请先理清一件事,那正是,

首先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(State of Qatar那样的Linux系统调用,但指标库是cygwin1。而MingW生成的前后相继,则全体应用从KE奇骏NEL32导出的科班Windows系统API。

(文/开源中夏族民共和国)    

要使用Windows中的POSIX规范高端编制程序效能和工具的优势,请使用Cygwin。

维基百科说 :

MinGWCygwin 1.3.3本子中分离出来。
纵然CygwinMinGW都得以用来将UNIX软件移植到Windows ,但她俩有例外的主意: Cygwin对象是提供二个整机的POSIX layer ,提供Linux , UNIXBSD变种中留存的多少个种类调用和库的效仿。 POSIX layer运行在Windows如上,为了兼容性而殉职品质。
因而,这种艺术须要运用Cygwin编写的Windows程序运维在必需与程序一同分发的copylefted包容性库的顶端,以至程序的source code 。 MinGW意志通过一贯的Windows API calls提供原生的功力和属性。
Cygwin不同, MinGW无需包容层DLL ,由以前后相继无需与source code联机分发。

由于MinGW依赖于Windows API calls ,因而不可能提供全部的POSIX API ;
它不或许编写翻译一些得以用Cygwin编译的UNIX applications 。
具体来讲,那适用于供给POSIX功能(如fork() , mmap()ioctl()甚至愿目的在于POSIX environment运维的应用程序。
使用自家已经移植到MinGWcross-platform library (例如SDL , wxWidgets , QtGTK+编排的应用程序平日在MinGW编写翻译将像在Cygwin那么轻易。

MinGWMSYS的构成提供了三个小型自富含的条件,能够将其加载到可活动传媒上,而没有供给在注册表或微计算机上的文本中留给条目款项。 Cygwin Portable提供了仿佛的成效。
通过提供更加的多的功能, Cygwin安装和掩护变得更其千头万绪。

也可以MinGW-GCC under POSIX systemsMinGW-GCC under POSIX systems cross-compile Windows applications 。
那意味开拓人士无需动用MSYS开展Windows安装来编写翻译在并未有Cygwin情形下在Windows运转的软件。

从移植C程序的角度来看,领会这么些的三个好办法正是比方:

#include <sys/stat.h>
#include <stdlib.h>

int main(void)
{
   struct stat stbuf;
   stat("c:foo.txt", &stbuf);
   system("command");
   printf("Hello, World\n");
   return 0;
}

即便大家把stat _stat ,大家得以用Microsoft Visual
C编写翻译这么些程序。大家也足以用MinGW和Cygwin来编写翻译那些顺序。

在Microsoft Visual
C下,该程序将链接到MSVC可再发行的运营时库: mxvcrtnn.dll ,其中nn是某些版本的后缀。
为了发表那些顺序,大家将只可以包括该DLL。
该DLL提供了_stat , systemprintf 。

在MinGW下,该程序将链接到msvcrt.dll ,那是二个里头的,未公开的,未版本化的库,是Windows的一片段,禁绝应用程序使用。
该库本质上是发源MS Visual
C的可再发行的运转时库的三个拨出,供Windows自己使用。

在这里三种情况下,该安排将有附近的表现:

  • stat函数将再次来到非常常有限的音信 – 举例,没有有用的权柄或inode编号。
  • 据他们说与驱动器c:相关联的当前职业目录来解析路径c:file.txt 。
  • system使用cmd.exe /c来运作外界命令。

笔者们也足以编写翻译Cygwin下的主次。 形似于MS Visual
C使用的可再发行的运转时,Cygwin程序将被链接到Cygwin的运转时库: cygwin1.dll (Cygwin
proper)和cyggcc_s-1.dll(GCC运转时支持)。
由于Cygwin曾经在LGPL之下,纵然它不是GPL包容的无需付费软件,我们也得以用大家的程序打包,并运路程序。

在Cygwin下,库函数的行为将有所不一致:

  • stat函数具备丰硕的功效,在大部字段中回到有意义的值。
  • 路径c:file.txt完全不明了为含有驱动器号援引,因为c:末尾未有斜杠。
    冒号被认为是名字的一部分,并以某种方式损坏了它。
    在Cygwin中尚无针对性卷或驱动器的绝对路线的定义,未有“当前记下的驱动器”概念,也不曾种种驱动器当前的劳作目录。
  • system函数尝试采纳/bin/sh -c解释器。
    Cygwin将依赖你的可施行文件的岗位来拆解分析/路径,并希望sh.exe次第与你的可实施文件坐落于sh.exe位置。

Cygwin和MinGW都同意你利用Win32函数。
假诺你想调用MessageBoxCreateProcess ,你能够这么做。
你也足以在MinGW和Cygwin下使用gcc -mwindows自在地创建一个无需控制台窗口的次序。

Cygwin不是从严的POSIX。 除了提供对Windows
API的拜访之外,它还提供了一部分Microsoft
C函数(在msvcrt.dll找到的东西或可另行分发的msvcrtnn.dll运营时)的亲善的落实。
多少个例证正是spawn*系列的spawn*一类别。
那几个在Cygwin上采纳并非forkexec是二个好主意,因为它们更好地照耀到未有fork概念的Windows进度成立模型。

从而:

  • Cygwin程序并比不上MS Visual C程序“当地化”,理由是急需库的陪同。
    Windows上的编制程序语言完毕内需提供自身的运作时,以至是C语言实现。
    Windows上向来不“libc”供民众接收。

  • MinGW不须要第三方DLL的实际实际上是三个毛病,
    它决定于Visual
    C运转时的未公开的Windows内部分支。 MinGW那样做是因为GPL系统库相当适用于msvcrt.dll ,那表示能够利用MinGW编写翻译和重复分发GPL编制程序的顺序。

  • 由于与msvcrt.dll对照,对POSIX的更分布和更加尖锐的支持,Cygwin是现今停止移植POSIX程序的减价条件。
    由于它今后在LGPL之下,所以它同意具有各样许可的应用程序(开放源代码或密封源代码)被重新分配。 Cygwin以致带有VT100虚假和termios ,它们与Microsoft调控台一同利用! 使用tcsetattr安装原始情势并采纳VT100代码来决定光标的POSIX应用程序就要cmd.exe窗口中健康干活。 就最后客户来讲,那是叁个本机调节台应用程序,使Win32调用来支配调整台。

然而:

  • 用作二个地点的Windows开荒工具,Cygwin有一对极其,举例Windows的外界路线管理,注重于像/bin/sh类的硬编码路线和任何问题。
    这几个差异是使Cygwin程序“非本地”的。
    要是程序将路线作为参数或从对话框输入,则Windows客户期望该路径的行事措施与此外Windows程序中的路线相通。
    假设不这么做,那正是个难点。

插件:在LGPL发布后快速,小编起步了Cygnal (Cygwin本地利用程序库)项目,以提供一个耐性解决那个主题素材的Cygwin
DLL的分层。
程序可以在Cygwin下开采,然后选取Cygnal版本的cygwin1.dll张开计划,而不须要再一次编写翻译。
随着那个库的修正,它将逐日覆灭对MinGW的急需。

当Cygnal消除路子管理难题时,能够付出三个独自的可实践文件作为Windows应用程序与Cygnal一同利用时,与Cygwin的/usr/bin下安装Cygwin路径无缝专业与Windows路线。
在Cygwin下,可实行文件将透明地管理/cygdrive/c/Users/bob类的门道。
在Cygnal版本的cygwin1.dll链接的地底铺排中,该路径将还未其余意义,而它将明白c:foo.txt 。

决不忽视AT&T的U /
Win软件,该软件能够辅助您在Windows上编写翻译Unix应用程序(最新版本

  • 二零一二-08-06;使用Eclipse公共许可证,版本1.0)。

像Cygwin相符,他们必需跑到三个教室。 在她们的情况下POSIX.DLL 。
AT&T的工作人士是不行棒的程序员(同样的集团给您带来了ksh和dot ),他们的事物值得一试。

Cygwin模拟整个POSIX意况,而MinGW只是编写翻译的一丁点儿工具集(编写翻译本地Win应用程序)。所以一旦你想让您的类型跨平台,两个之间的抉择是分明的,MinGW。

纵然你恐怕会虚构在Windows上使用VS,在Linux / Unices上使用GCC。
大比比较多开源项目都以如此做的(举个例子Firefox或Python)。

请细心,效率行为能够真正在两个之间变化。

譬如,Cygwin tar能够fork –
因为fork()在DLL中被扶助,而mingw版本则不能够。
尝试从源代码编写翻译mysql时,那是三个难点。

要在经济贸易/专有/非开源应用程序中使用Cygwin,您需求从Red
Hat获得“ 许可证买断 ”的数万港元;
那使正式许可条目款项以非常大的开支无效。
谷歌(Google卡塔尔(قطر‎“cygwin许可证费用”,看见前多少个结实。

对此mingw,那样的本金是不会产生的,许可证(PD,BSD,MIT)是老大宽容的。
您至多可能须要为你的应用程序提供许可证详细新闻,比如利用mingw64-tdm时所需的winpthreads许可证。

编辑多谢Izzy向阳花:商业许可证不再是可用的或要求的,因为在Cygwin的winsup子目录中找到的API库今昔正值 LGPL下分发 ,实际不是总体的GPL。

Cygwin目的在于为Windows提供几个或多或少完整的POSIX情形,个中包含一套广泛的工具,目的在于提供一个总体的类Linux平台。
相比较之下,MinGW和MSYS提供了四个轻量级的,极简主义的类POSIX层,唯有像gccbash这么的更关键的工具可用。
由于MinGW更简短的方法,它不提供Cygwin提供的POSIX
API覆盖的水准,因而无法营造某个能够在Cygwin上编写翻译的主次。

基于两个生成的代码,Cygwin工具链注重动态链接到叁个大的周转时库cygwin1.dll ,而MinGW工具链将代码编写翻译为二进制文件,动态链接到Windows本机C库msvcrt.dll以至静态地glibc一对。
Cygwin可施行文件因而特别紧凑,但须要单独的可再发行DLL,而MinGW二进制文件能够独立运作,但频仍会更加大。

依照Cygwin的程序须要单独运营的DLL也会引致许可限定。
Cygwin运营时库在GPLv3下获得特许,对于有着OSI宽容许可的应用程序,链接例外,因而希望围绕Cygwin构建闭源应用程序的开垦者必需从Red
Hat获得商业特许。
其他方面,MinGW代码能够用于开放源码和查封源码的应用程序,因为头文件和库文件是被批准的。

Cygwin是四个雷同于Unix的条件和Microsoft
Windows的授命行分界面。

Mingw是GNU编写翻译器集合(GCC)到Microsoft
Windows的原生软件端口,还应该有一套可自由分发的用来Windows
API的导入库和头文件。 MinGW允许开采职员创立本机Microsoft
Windows应用程序。

借使具有须要的库(DLL)都存在,您就能够在不使用cygwin条件的情事下运作使用mingw转移的二进制文件。

Cygwin使用万分性层,而MinGW是地点的。 那是例外的。

 

在 Windows 系统上打开浏览器,通过访问 下载
Cygwin 安装程序。安装程序自个儿相当小(大约 600KB),因为好些个 Cygwin
软件是在设置进度中下载的。实现下载之后,根据以下步骤安装 Cygwin:

什么样从Unix-like系统向Windows系统移植软件?

 

今世操作系统包涵Windows和Linux的骨干安排概念,像经过线程地址空间虚构内部存款和储蓄器那一个都连镳并轸,二者之上的前后相继之所以不协作,首要是它们对这一个意义具体落实上的反差:

先是,是可推行文件的格式,Window使用PE的格式,并且须求以.EXE为后缀名,Linux则使用Elf。

扶助,操作系统API也同,比如,Windows用CreateProcess(卡塔尔国制程,而Unix-like系统则动用fork(卡塔尔(قطر‎,别的还大概有为数不菲诸如spawn、signals、select、sockets等。

分析之后能够,要把Unix-like系统上的软件移植到Windows上,有三种思路:

首先种:校勘软件源码并再度编写翻译,这些措施最笨,类Unix下大批量的软件要校勘专门的事业量十分的大,编写翻译生成靶子平台可试行文件格式。

第三种:不改换软件源码但把类Unix接口调用悄悄替换为WinAPI,还是必要重新编写翻译,编译生成靶子平台可试行文件格式。

其三种,无缝移植的运作情况,没有须求另行编写翻译,在一种OS上确立另一中OS的施用软件虚构境况(和虚构机不等同),比方Wine(把Windows上的可执路程序直接原样移植到Linux上)。

 

要在Cygwin景况中管理软件包,能够利用自带的setup.exe。此外,Cygwin中还会有形似于apt-get的包微处理机,叫做apt-cyg。那篇小说介绍了apt-cyg的安装和应用。

  1 运转安装程序。
  图片 1
  2 单击 Next 踏向下一个显示器,选用要举办的安装类型。单击 Install
from Internet

  3 单击 Next,然后接纳二个安装目录。
  图片 2   
  在大多动静下,推荐的安装选项是符合的,也得以开展定制,不过要小心几点:   1)不要在 Windows 系统的根目录(比方 C:)中安装 Cygwin。最棒把
Cygwin 安装在它本人的子目录中,举例暗中同意目录(C:\cygwin)或 C:\Program
Files\cygwin。(您选拔的目的目录将变为模拟的 UNIX 遇到的根目录
/。例如,如果在 C:\cygwin 中设置,那么设想的 /usr/bin 实际上是
C:\cygwin\usr\bin) 。
  2)对于 Install For 选项,不要筛选 Just Me。   3)把 Default Text File 类型设置为
Unix,进而尽恐怕升高与别的 UNIX 机器上囤积的依存文件的兼容性
  4 单击 Next。在下二个窗口中,选拔贰个存款和储蓄 Cygwin
所需的多寡的目录。不用筛选前一步中精选的 Cygwin 目录。
若是或者的话,应该在有起码 1GB 空闲空间的驱动器上创造或接收叁个目录。
  5 重复单击 Next,选用选取的 Internet 连接类型。平常应该选用Direct Connection。
      6 双重单击 Next。稍等说话,Cygwin
会下载当前的镜像站点列表,让你选择三个镜像站点,
  图片 3
  固然不分明相应采纳哪个站点,就选拔地理位置比较近的站点。
  7 再次next,
经过短暂的推迟之后,安装程序显示可用的类别和包的完全列表。
  图片 4
  展现三个系列的有个别剧情。单击加号
(+卡塔尔 打开对应的种类;单击 “循环” 标记在
Skip(忽视此包)和包的持有可用版本之间循环。假如 Cygwin
提供二个实用程序的多个本子,应该接收满足你的须求的实例。顺便说一下,借使选拔B 列,就能够下载二进制包;接纳 S,也会下载源代码。

Cygwin和MingW的对比

 

用作编写翻译景况时,都信任于GCC

用它们作编写翻译情况、交叉编写翻译,根本上都以因为GCC编译器的支撑,它们做的办事是为GCC的编写翻译消释Unix-like、Windows间OS
API的间隔那几个阻力。

 

五头都一定要另行编写翻译后达成移植,生成的顺序都是PE格式

两个都不可能让Linux下的次第直接运转在Windows上(无缝移植),必须通过源代码重新编写翻译。某一个人声言cygwin扶持rpm的压缩包,注意,rpm压缩包实乃src.rpm,内部照旧源码而非elf格式,cygwin不辅助常规rpm包的安装。

 

Cygwin运行在Windows上,MingW运行在Linux或者Windows上

Cygwin是Windows上运转的Unix-like蒙受,MingW是运维在Linux或许Windows上的Windows PE编写翻译情状。

 

MingW中的子项目MSys和Cygwin更像

Cygwin除了康健模拟Linux的接口(命令行,OS
API),提要求运转在它上边的的Windows程序选择,并提供了汪洋现有的软件,更疑似三个阳台。MingW也许有一个叫MSys(Minimal SYStem)的子项目,主倘若提供了一个模仿Linux的Shell和有个别骨干的Linux工具。因为编写翻译二个巨型程序,光靠一个GCC是远远不够的,还索要有Autoconf等工具来铺排项目,所以平日在Windows下编写翻译ffmpeg等Linux下的大型项目皆以通过Msys来成功的,当然Msys只是多个推搡遭遇,根本的行事或然MingW来做的。

 

落到实处思路有同有异

Cygwin和MingW都以第三种软件移植思路,当然,二者仍有分别,分歧就在于“替换”方式,Cygwin编写翻译时,程序依旧以Linux的不二等秘书技调用系统API,只可是把Unix-like接口link到温馨的cygwin1.dll上,然后在cygwin1.dll中再一次调用Windows
API,cygwin1.dll再调用Windows对应的兑现,来把结果回到给程序。也即是说,他们依照Win32
API中写了叁个Unix系统API的重定向层,所以用它移植的软件都依据于cygwin1.dll,MingW编写翻译时经过特有的WinAPI头文件把类Unix-like调用替换为WinAPI,用它移植的软件不供给依据第三方库,可间接运营在Windows平台。为了达到类Unix软件仅经过重新编写翻译移植到Win的目标,Cygwin在运作时冯谖三窟,MingW在编写翻译时暗送秋波。

用三个PE格式查看工具检查一下就能够发掘,Cygwin生成的程序仍然有fork(卡塔尔(قطر‎那样的Linux系统调用,但指标库是cygwin1。而MingW生成的顺序,则整个采取从KEMuranoNEL32导出的正规化Windows系统API。

 

采纳办法有同有异

把类Unix上的软件移植到Windows是两岸的着重目标,除了那一个之外,顺带的,MingW和Cygwin都能够用来跨平台开拓等等其余作业,

Windows +
Cygwin:能够在Windows上读书Linux命令,还足以在Windows上做Linux软件的支付,包含用GCC编译elf(交叉编写翻译)。

Linux + MingW:能够在Linux上做Windows软件的费用,包罗用GCC编译exe(交叉编写翻译)。

Windows/Linux +
MingW:能够脱身MSVC的“束缚”,用GNU的自由软件来编译生成不依赖第三方库的纯粹Windows
PE格式(exe)二进制造进程序。

 

Cygwin重量级,MingW轻量级

与MingW思路一致的,两者对比,Cygwin是重量级的(需下载50M上述直至数百兆不等,安装后占用空间可达1G),MinGW是轻量级的(需下载的文书唯有20M,安装后70M左右),那是单纯从容积上说的,此外Cygwin今后据他们说亦非完全免费的了。

 

互连网上的对照列表(UnxUtils自行无视,仅供参照他事他说加以考察)

功能

UnxUtils

MinGW

Cygwin

设计原理

原生

原生

模拟

运行依赖

无依赖

依赖msys.dll(一定依赖它吗?值得验证)

依赖cygwin.dll

运行性能(比较)

最快

中等

DOS执行

可以

可以

不可以

更新速度

完善停止更新

较慢

基本同步gcc

shell命令

较多

较少

较多

uname

WindowsNT

MINGW32_NT-5.1

CYGWIN_NT-5.1

env

同Windows

同Windows

不完全同Windows

root

C:/

C:/

/

home

C:/Documents and Settings/test

/home/test: No such file or directory

/home/test

pwd

C:/bin

/usr/bin

/home/test

df

cannot read table of mounted filesystems

/cygdrive/c

vi

gcc套件

开发库

WinAPI

POSIX

图形库

GTK/QT

GTK/QT

可移植性

Win32API不可移植

无缝移植

程序运行

原生

模拟

程序依赖

cygwin.dll

程序性能(比较)

较快(慢于VC和Linux下的gcc)

较慢(快于java)

 

Cygwin暗中认可的分界面如下:
图片 5

在 Cygwin 中可用的包当先 1,000
个,所以应当只选取你需求的档案的次序和包。(安装具备 Cygwin 包会占用超越 800MB
的磁盘空间)。现在随即能够加上全套项目或单独的包:只需另行运营 Cygwin
安装程序。(还是可以在其余时候用雷同的安装程序删除或更新包)。

 

很难看,私下认可不能够复制粘贴,必要敞开快速编辑模式要么点击左上角,选拔编辑。Cygwin官方网址建议采取MinTTY作为终点工具。MinTTY已经自带,输入mintty进入。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章