Cygwin is a collection of GNU tools that provides a Linux-like environment under Microsoft Windows; the DLL cygwin1.dll provides the Linux API functionality.
MinGW is a minimalist GNU Linux environment for developing native Microsoft Windows applications; it makes use of DLL's that are provided by Microsoft as part of Windows.
I don't really quite get all the distinctions. In the context of a question about symlinks, see this posting for a brief discussion.
Cygwin is installed by downloading and running a setup programme,
setup-x86_64.exe. Subsequent updates are done by
rerunning the same programme. I use
C:\cygwin64 as the Root Install Directory and
D:\CygwinPackages as the Local Package Directory.
A Cygwin shell is started by doing
To compile my software I think I need to explicitly install
the following packages, although I've become a bit confused about when
and how I installed what:
libjpeg* (Cygwin has version 8, I assume 6.2, Cygwin no longer has it
even as an obsolete package; 8 should be source compatible with 6.2
should even be binary compatible);
I've made at least some of my software run under Cygwin in
the past, but today (2015 Apr 11) I'm giving up after getting build messages
of the form
../sysdep/file_x_.c:153:(.stab+0xc08): relocation truncated to fit: R_X86_64_32 against `.text'.
To run an X11 programme (e.g., one of my graphics programmes), one needs to run the XWin server (FAQ). Normally it would be run by doing. But …
It is sometimes desirable to define a Windows environment variable
CYGWIN = tty.
Among other things, this prevents
^C from being mapped
messes up Emacs commands (ref 1,
tty this way causes
not to work properly. For example,
the XWin server may start but some applications cannot be
started by right-clicking the Cygwin/X Server icon in the system
tray and using the menu.
is to do
startxwin -- +bs)
manually in a Cygwin shell
This is analogous to
in ‘real’ *n*x.
Sometimes Cygwin gets itself into a condition in which things don't work very well any more and beastly error messages appear, such as
Doing vfork: resource temporarily unavailable
rebaseall(in the package
rebase). See this post by Eric Blake for a hint about what's happening. To run
rebaseall: exit from anything related to Cygwin; do ;
cdto the Cygwin binary directory (e.g.,
ash(a shell); and give the command
./rebaseall -v(ref1, ref2).
In addition to the packages available by default, there are also many
packages available from the Cygwin Ports project. There are good instructions there for how to tell
setup.exe to get things from
(Zoltan Hawryluk posted detailed instructions for
Installing Cygwin and FontForge for Windows.)
I have even less experience with MinGW than with Cygwin. MinGW (Minimalist GNU for Windows) 'is a minimalist development environment for native Microsoft Windows applications' and is used with MSYS, a shell command-line interpreter. I don't really understand why the name MSYS exists distinct from the name MinGW. MinGW contains compilers, binutils (assembler, linker, archive manager) and installers. MSYS includes a shell (command-line interpreter) and a few Unix tools.
Last update on SourceForge dated 2018 Jul 13, as of 2021 Apr 4.
In detail: MinGW includes package-list,
autoconf, automake, basic-bsdtar, binutils, bzip2, cygutils, expat,
gcc3, gcc4, gcc-tools, gdb, gendef, gettext, gmp, libarchive,
libiconv, libtool, make, mingw-get, mingw-utils, mgwport, mpc, mpfr,
pexports, popt, pthreads-w32, runtime, xz, zlib, libunistring,
pdcurses, base & autotools.
MSYS includes package-list, autoconf, autogen, automake, bash, binutils, bison, bzip2, console, core, coreutils, crypt, cvs, cygutils, dash, diffutils, diffstat, expat, file, findutils, flex, gawk, gcc, gdbm, gettext, gmp, grep, groff, guile, gzip, help2man, inetutils, less, libarchive, libiconv, libtool, libxml2, lndir, lpr-enhanced, m4, make, man, minires, mintty, mktemp, openssh, openssl, patch, perl, popt, rebase, regex, rsync, rxvt, sed, tar, termcap, texinfo, unzip, vim, w32api, wget, xz, zip, zlib, mksh, base, developer-toolkit & system-builder.
Related projects are:
codeblocks-16.01mingw-setup.exefor C and C++, or
codeblocks-16.01mingw_fortran-setup.exeto also include Fortran.
.hfiles). Programmes must also be linked to the
libws2_32(winsock) of MS Windows. Downloaded files dated 2010 Jun 21 as of 2021 Apr 4. Apparently only for 32 bits, not 64. Requires that
DISPLAYvariable contains an IP address (so
127.0.0.1:0for local machine, not
By default, MSYS uses
bash as its shell, but run under the
sh which changes it behaviour.
dash shell is also available and can be installed
with the command
mingw-get install msys-dash
bash (unless run
sh) also reads
~/.bash_login if they exist. (This is an oversimplification.)
MinGW does not support symbolic links (cf. thread of 2012 Mar 9–14).
Graphics libraries for use with MinGW are discussed under LibrariesAndTools. The link given there for GTK+ downloads is wrong; it should be http://www.gtk.org/download/index.php. There is a discussion there about whether it's best to get things related to GTK+ from http://sourceforge.net/projects/mingw/files/ or directly from the GTK+ site, but the wording is confusing (cf. response to my query). Apart from MinGW and MSYS themselves, there is little at the SourceForge site and most of it is very old.
I downloaded the all-in-one .zip bundle of the GTK+ stack from
I copied the
include/cairo/ directory to
I had to change
is/was a project that attempts to overcome some of the issues of MinGW,
with a fork of Cygwin's installer. In a dismissive cygwin-talk thread
it was mentioned that, as of 2010 May 31, 'in just a few weeks, the
MinGW folks are going to (finally) release an installer of their own,
which is extensible and allows to "include by reference" other
repositories of addons'
I guess that refers to
This section describes what I did in 2011-2015 to get MinGW ready to build my software. As of 2021 Apr 3, I've started to use Mingw-w64 and will have to revisit all this.
Laurence Muller has a description of How to upgrade your MinGW with commonly used libraries (2010 Mar). See also kemovitra's MinGW Tutorial: Compiling GTK+ 2.16.4 for Windows (2009 Jun), and the GTK+ download page for 32-bit Windows (there is also an experimental page for 64-bit Windows).
To install libjpeg: in the MSYS shell I did
make install(installed things in bin/ and man/man1/)
make install-lib(installed things in lib/ and include/)
To install zlib (required by libpng):
make install(installed things in lib/, include/ and share/man/)
To install libpng:
~/src/libpng.1.2.49/(version ‘with config script’; I had been using libpng.1.2.12 without the config script but I had trouble getting it to install)
make install(installed things in bin/, lib/, include/ and share/man/)
To get curses, I did
mingw-get install libpdcurses.
C:\MinGW\lib\ I made copies of the
files, naming them
dir.h is in
include rather than in
include/sys/. In any case, I've switched to
<dirent.h> rather than
To get the X11 headers, I downloaded
and copied the
I also downloaded
X11lib.tar.gz and copied its
I've also made a number of changes in my source code, mostly because gfortran detects different errors than g95 does.
This 2007 fork of MinGW ‘delivers runtime, headers and libs for developing both 64 bit (x64) and 32 bit (x86) windows applications using GCC and other free software compilers’. The relationship between this and the MinGW project appears to be unfriendly, with issues revolving around licensing (ref).
Last update on SourceForge dated 2021 Apr 3 as of 2021 Apr 4.
mingw-w64-install.exe offers a few alternatives,
including either 32-bit (i686) or 64-bit (x86_64),
and installs them into different directories under
Program Files\mingw-w64\ or
Program Files (x86)\mingw-w64\,
and installs multiple shortcuts
in the Start Menu. The shortcuts
all look the same unless you edit them.
There's also a multilib version which I haven't looked at yet.