export PREFIX=/usr/local/cross tar xvfz binutils-2.13.1.tar.gz mkdir build-binutils cd build-binutils ../binutils-2.13.1/configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=i686-pc-mingw32 --prefix=$PREFIX make make install cd .. export PATH=$PREFIX/bin:$PATH tar xvfz mingw-whatever.tar.gz cp -r ming-whatever/include $PREFIX/i686-pc-mingw32/include (you want standard C headers for mingw in $PREFIX/target/include) tar xzf w32pi-whatever cp -dpR w32api-whatever/include/* $PREFIX/$TARGET/include tar xvfz gcc-3.2.1.tar.gz mkdir build-gcc cd build-gcc ../gcc-3.2.1/configure --prefix=$PREFIX --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=i686-pc-mingw32 --without-headers --with-newlib --disable-threads --enable-languages=c make make install cd.. tar xvfz w32api-2.1.tar.gz mkdir build-w32api cd build-w32api ../w32api-2.1/configure --prefix=$PREFIX/i686-pc-mingw32 --build=i686-pc-linux-gnu --host=i686-pc-mingw32 make make install (you should now have windows header files in prefix/target/include and import libs in prefix/target/lib) cd .. mkdir build-mingw cd build-mingw ../mingw-whatever/configure --build=i686-pc-linux-gnu --host=i686-pc-mingw32 --prefix=$PREFIX/i686-pc-mingw32 I had to tweak the mingw Makefiles here (3 in total) because the CFLAGS did not include a dirtectory containing the required windows header files; adding -I$(PREFIX)/i686-pc-mingw32/include to INCLUDES did the trick make make install cd ../build-gcc rm -rf * ../gcc-3.2.1/configure --prefix=$PREFIX --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=i686-pc-mingw32 --enable-threads --enable-languages=c,c++ --disable-long-long make make install I had to specify --disable-long-long because I get undefined symbols (regarding string-to-long-long conversion) in the resulting libstdc++.