MinGW és a cross-build Linux alatt

Készítek pár GTK+ -t használó alkalmazást, jó lenne lefordítani őket Windows alá, viszont mindezt Linux alatt. Ezért most gyorsan felvésem magamnak a tudnivalókat ide, én Ubuntu-n ügyködök, de megy ez máshol is.

  1. Először is kell MinGW a Linuxra: apt-get install mingw32 mingw32-binutils mingw32-runtime
  2. Töltsük le a GTK+ Windowsos változatát (igen, azt): 32 bit, 64 bit. Nyilván az előbbi kettőből csak az egyik kell, amelyik változatra szeretnél fordítani. Itt szinte mindenből kell a Binaries és a Dev, ha nem szeretnél ennyi mindent egyesével letölteni, akkor van egy "bundle" csomag, ami mindent tartalmaz egyben, az All-in-one bundle alatti részben találod kilinkelve az oldalon. Én ez utóbbi használatát javaslom.
  3. A letöltött csomago(ka)t át kell helyezni az /usr/i586-mingw32msvc/ könyvtárba, és ott kicsomagolni jól. Akkor csináltad ügyesen, ha lett például ilyen könyvárad: /usr/i586-mingw32msvc/lib/gtk-2.0/
  4. Na most egy csúnya rész jön: Lett egy ilyen könyvtárad: /usr/i586-mingw32msvc/lib/pkgconfig/, tele .pc kiterjesztésű fájlokkal.
    Ezeknek a fájloknak az első sora ilyesmi:
    prefix=c:/devel/target/15b8edc4c065056b502aacb9c2e1d417
    Ez így teljes badarság, meg kell nyitni őket, és összesben átírni ezt a sort erre:
    prefix=/usr/i586-mingw32msvc/
    Erre majd összeütök valami kis segédeszközt, amit megosztok itt.
  5. Ha ez megvan, be kell állítani, hogy hol keresse a fordítót és a pkgconfig csomagleírásait:
    • export CC="i586-mingw32msvc-cc"
    • export CXX="i586-mingw32msvc-c++"
    • export CFLAGS="-O2 -mms-bitfields"
    • export CXXFLAGS="-O2 -mms-bitfields"
    • export PKG_CONFIG_PATH="/usr/i586-mingw32msvc/lib/pkgconfig"
  6. Mehet a fordítás, ha autoconf-os a program, akkor ennyi:
    • mkdir /home/foobar/kesz_program
    • ./configure --host=mingw32 --prefix=/home/foobar/kesz_program --disable-nls
    • make
    • make install
    • ha sikerült, a lefordított programot a /home/foobar/kesz_program könyvtárban találjuk