Setting up the build environment on Windows

Assuming Windows XP 32. We will use MinGW to build the libraries and application and MSYS as a working environment.

The distinction between MinGW and MSYS is very important: MinGW is a set of compilers and libraries you use to build Windows applications, while MSYS is an emulated GNU environment similar to (and, in fact, based on) Cygwin. You can not use MSYS libraries in your Windows application. This means that you will sometimes have two copies of a particular library: an MSYS version used by MSYS tools, and a native version built with MinGW and used by MinGW tools and / or your application.

We will install MinGW into C:\MinGW and MSYS into C:\MSYS.

MSYS maps Unix-like paths to Windows paths: / translates to C:\MSYS and /mingw translates to C:\MinGW. In addition, all Windows drives will show up as /x, where x corresponds to the drive letter, so /c/windows translates to C:\windows, etc.

We will install our libraries and applications into C:\met.no. You should start by creating that directory and the required subdirectories:

C:\> mkdir met.no
C:\> mkdir met.no\bin
C:\> mkdir met.no\include
C:\> mkdir met.no\lib
C:\> mkdir met.no\share
C:\> mkdir met.no\copyright

Doesn't really matter which one. Certified binaries of The Real McCoy are available at http://www.collab.net/downloads/subversion/ (command-line only) if you have an account (or are willing to register). There are other (non-certified) sources such as SlikSVN (http://www.sliksvn.com/en/download, command-line only) and TortoiseSVN (http://tortoisesvn.net/downloads, with Windows Explorer integration, which is really neat).

Download and the latest automated installer from http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/ and run it. Ask for the current version (not previous or candidate). Select these components and these components only: base tools, g++ compiler, g77 compiler.

As of 2009-11-20, the current MinGW version is 5.1.6, which includes GCC 3.4.5.

tip: move the installer into an empty directory before starting it; it will download all the MinGW distribution files into that directory.

At this point, you may want to download bsdtar from http://sourceforge.net/projects/mingw/files/MinGW%20Utilities/basic%20bsdtar/bsdtar-2.7.900a_r1628-20091110/ and install bsdtar.exe as /mingw/bin/tar. It supports a wider range of archive formats and compression algorithms than GNU tar, and automatically detects which one to use.

You may want to install InfoZip's zip utility as well, since bsdtar can extract zip files but not create them: download the source code from http://sourceforge.net/projects/infozip/files/, extract it, and run the following commands in the source directory:

$ make -f win32/makefile.gcc
$ cp zip.exe /mingw/bin

Download the MSYS installer from http://sourceforge.net/projects/mingw/files/MSYS%20Base%20System/ and run it (you will need administrator privileges). Accept the default answer to all questions.

As of 2009-11-20, the latest MSYS version is 1.0.11.

Let's see if our C compiler works:

$ which gcc
/mingw/bin/gcc.exe
$ gcc --version
gcc.exe (GCC) 3.4.5 (mingw-vista special r3)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ cat >hello.c
#include <stdio.h>
int main(void) { printf("Hello, C world!\n"); return 0; }
^D
$ gcc -o hello hello.c
$ ./hello.exe 
Hello, C world!

And C++:

$ which g++
/mingw/bin/g++.exe
$ g++ --version
g++.exe (GCC) 3.4.5 (mingw-vista special r3)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ cat >hello.cc
#include <iostream>
int main() { std::cout << "Hello, C++ world!" << std::endl; return 0; }
^D
$ g++ -o hello hello.cc
$ ./hello.exe 
Hello, C++ world!

And Fortran 77:

$ which g77
/mingw/bin/g77.exe
$ g77 --version
GNU Fortran (GCC) 3.4.5 (mingw-vista special r3)
Copyright (C) 2004 Free Software Foundation, Inc.

GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Fortran
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING
or type the command `info -f g77 Copying'.
$ cat >hello.f
      PROGRAM HELLOW
      WRITE(UNIT=*, FMT=*) 'Hello, Fortran world!'
      END
^D
$ g77 -o hello hello.f
$ ./hello.exe 
 Hello, Fortran world!

Or rather, in our brave GNU world, flex and bison. There is a problem here: you can't use the MSYS versions, because they're not just build tools&mdash;bison includes a runtime library (liby). Hence we need native versions of both tools. We can get those from GnuWin32.

Download the following files from http://sourceforge.net/projects/gnuwin32/files/:

  • the bin, lib and dep zipfiles for the latest bison release (the dep zipfile contains a few libraries that bison needs, so you won't have to install them separately)
  • the bin and lib zipfiles for the latest flex release

For some unfathomable reason, both the flex and bison lib zipfiles contain incorrect copies of <unistd.h>. Either make a backup copy of /MinGW/include/unistd.h before you unpack them, or tell unzip (or bsdtar) not to overwrite existing files:

$ tar -kxf bison-2.4.1-lib.zip -C /MinGW

This will install a shell script called /MinGW/bin/yacc which incorrectly redirects to c:/progra~1/bison/bin/bison. Edit it so the entire script looks like this:

#! /bin/sh
exec /mingw/bin/bison -y "$@"

Microsoft's tool for creating installation packages: http://sourceforge.net/projects/wix/files/. Ironically, it does not come with its own installer.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • diana/windows/building/environment.txt
  • Last modified: 2022-05-31 09:29:31
  • (external edit)