Sometimes, we get confused between Cygwin and MinGW when developing open source applications. Of course, they are not the same but which one to prefer when is a big challenge.
Differences
MingGW (MSYS) by itself does not contain a compiler or a C library, therefore does not give the ability to magically port UNIX programs over to Windows nor does it provide any UNIX specific functionality like case-sensitive filenames. Users looking for such functionality should look to Cygwin.
Cygwin applications by principle are not considered a “Native Win32 application” because it relies on the Cygwin® POSIX Emulation DLL or cygwin1.dll for Posix functions and does not use win32 functions directly. MinGW on the other hand, provides functions supplied by the Win32 API. While porting applications under MinGW, functions not native to Win32 such as fork()
, mmap()
, or ioctl()
will need to be reimplemented into Win32 equivalents for the application to function properly.
Preference
In MinGW, the MSYS is a collection of GNU utilities such as bash, make, gawk and grep to allow building of applications. It is a command prompt where users run “./configure
” then “make
” to build programs. The problem is there’s no /usr
directory psychically. The root (/
) is considered as usr (/usr
) path – so you cannot create one either. The problem arises while a program depends on third party library – there is no place to put this third party library so that the default search path can find the library file. Usually in linux /usr/local/lib
is the default library search path. So the client program cannot configure with ”./configure
”. You will need special modification on LIBRARY_PATH
environment variable which is very tedious and cumbersome.
So to run the program which needs lots of dependency on other libraries, I would prefer Cigwin over minGW.
References