[HowTo] Cross-compilation C++/Qt4 : Linux - > Windows
Note : J'ai effectu� cette installation sur une Ubuntu Dapper Drake, il y a des chances que cela fonctionne sur une Debian unstable, mais je n'en sais strictement rien. ( besoin des paquets QT4 4.1.2). N'ayant jamais travaill� avec autre chose qu'une debian ou ubuntu, vous �tes livr� a vous m�me si vous �tes dans ce cas !!! (voir r�f�rences en bas du howto)
Je suis actuellement sur un projet C++/QT4 (scolaire), avec binaires windows � rendre. Seul probl�me, je n'ai plus un seul windows d'install�, que cela soit chez moi, ou sur l'ordinateur que j'utilise en cours !!!
J'ai donc mis en place un environnement de cross-compilation pour produire des binaires windows utilisant QT4, j'ai assez gal�r�, donc autant en faire profiter le plus grand nombre.
INSTALLATION DE L'ENVIRONNEMENT DE BASE
Code:
amalsek@amalsek-desktop:~$ sudo wine mingw32 mingw32-binutils mingw32-runtime
La vous avez d�j� un environnement de cross-compilation simple
On va essayer :
essai.cpp
Code:
1 2 3 4 5 6 7 8 9 10
| #include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL,
"Cette fenêtre prouve que le cross-compilateur est fonctionnel !",
"Hello World", MB_OK);
return 0;
} |
Code:
amalsek@amalsek-desktop:~$ i586-mingw32msvc-g++ -o essai.exe essai.cpp
Normalement �a compile...
Il faut ensuite r�cuperer la dll de mingw (et la mettre dans le meme repertoire que l'exe ou ~/.wine/drive_c/windows/system )
Code:
amalsek@amalsek-desktop:~$ gunzip -c /usr/share/doc/mingw32-runtime/mingwm10.dll.gz > mingwm10.dll
Puis on teste la fenetre
Code:
amalsek@amalsek-desktop:~$ wine essai.exe
Normalement tout est bon et la fen�tre apparait
Maintenant on va commencer le plus difficile, la mise en place de QT4
AJOUT DES BIBLIOTHEQUES QT4
On r�cup�re les binaires et les paquets de d�veloppement QT4 d'ubuntu
Code:
amalsek@amalsek-desktop:~$ sudo apt-get install libqt4-core libqt4-gui libqt4-qt3support libqt4-sql libqt4-debug-dev libqt4-dev
On r�cup�re �galement les binaires win32 sur le site de Trolltech
( /!\ 45Mo /!\ )
Code:
amalsek@amalsek-desktop:~$ wget http://wftp.tu-chemnitz.de/pub/Qt/qt/source/qt-win-opensource-4.1.2-mingw.exe
Puis on les extrait de l'executable grace a wine
Code:
amalsek@amalsek-desktop:~$ wine qt-win-opensource-4.1.2-mingw.exe
Notes: pas besoin de telecharger MinGW durant l'install.
ne pas oublier d'enregistrer les dll dans le registre de wine. (l'installeur vous le demande)
On copie les binaires windows dans un dossier
Code:
1 2
| amalsek@amalsek-desktop:~$ sudo cp -Rf ~/.wine/drive_c/Qt/4.1.2 /usr/local/
amalsek@amalsek-desktop:~$ sudo mv /usr/local/Qt /usr/local/qt4-win32 |
Maintenant on va toucher a la configuration de qmake - on va en cr�er une nouvelle (a partir de celle de windows)
Code:
1 2
| amalsek@amalsek-desktop:~$ sudo cp -Rf /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++
amalsek@amalsek-desktop:~$ sudo nano /usr/share/qt4/mkspecs/win32-x-g++/qmake.conf |
Les lignes a modifier sont les suivantes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| QMAKE_CXX = i586-mingw32msvc-g++
QMAKE_INCDIR = /usr/i586-mingw32msvc/include/
QMAKE_INCDIR_QT = /usr/local/qt4-w32/4.1.2/include
QMAKE_LIBDIR_QT = /usr/local/qt4-w32/4.1.2/lib
QMAKE_LINK = i586-mingw32msvc-g++
# ne pas oublier le -mwindows ici
QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
#isEqual(MINGW_IN_SHELL, 1) {
QMAKE_DIR_SEP = /
QMAKE_COPY = cp
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm -f
QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rm -rf
#} else {
# QMAKE_COPY = cp
# QMAKE_COPY_DIR = cp -r
# QMAKE_MOVE = mv
# QMAKE_DEL_FILE = rm -f
# QMAKE_MKDIR = mkdir -p
# QMAKE_DEL_DIR = rm -rf
#}
# Enlever les .exe et rajouter -qt4
QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc-qt4
QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic-qt4
# Je n'ai pas trouvé d'équivalent de ce fichier, j'ai quand meme enlevé le .exe
QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc
QMAKE_RC = i586-mingw32msvc-windres
QMAKE_STRIP = i586-mingw32msvc-strip |
A partir de la, normalement l'environnement est configur�. Pour compiler votre projet QT4, allez dans la racine de celui-ci et faites :
Code:
1 2 3
| amalsek@amalsek-desktop:~$ qmake-qt4 -project
amalsek@amalsek-desktop:~$ qmake-qt4 -spec win32-x-g++
amalsek@amalsek-desktop:~$ make |
Note: Si la compilation �choue car il manque des fichier du type "libQtGui_Debug", il est possible qu'il y ait besoin de rajouter la ligne "CONFIG -= debug" dans le fichier .pro g�n�r� par qmake-qt4 -project
L'ex�cutable se trouve plac� dans le r�pertoire release/ . Vous pouvez maintenant le lancer grace a la commande wine monprojet.exe !!!
Si vous avez des commentaires ou des am�liorations, n'h�sitez pas !!!
Mes sources :
http://silmor.de/29
http://www.dumbbell.fr/howto/win32-c...lation.fr.html