IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

[HowTo] Cross-compilation C++/Qt4 : Linux - > Windows


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    amalsek@amalsek-desktop:~$ gunzip -c /usr/share/doc/mingw32-runtime/mingwm10.dll.gz > mingwm10.dll
    Puis on teste la fenetre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Si tu peux étoffer un peu, mettre quelques screenshots, on peut en faire un article et le publier.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Si tu peux étoffer un peu, mettre quelques screenshots, on peut en faire un article et le publier.
    Ok, je vais voir ce que je peux faire, (essentiellemet le fonctionnement sur d'autres distros, essayer d'utiliser CMake - ça ca serai pas mal - au lieu de qmake,etc ..), mais je ne peux rien promettre, je suis déjà pas mal occupé ...

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Non non, garde ce que tu as fait. Mais explique un peu plus (introduction, liens vers les sites concernés, ...), donne quelques screenshots et transforme un peu pour faire + article et - post de forum.
    C'est un tuto Qt, donc qmake c'est très bien. Pour les autres plateformes, si tu as le temps pour quoi pas. Mais je te parle juste de remodeler ce que tu as déjà fait. Car là ton post va partir dans l'oubli d'ici 1 semaine. Si on le publie, il va être annoncé, etc...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    J ai suivi toute la procedure et rajouter les librairies au projet petit a petit , mais le lQtGui et lQtCore posent probleme... C'est vraiment l ultime Make qui foire un peu

    Une idee? merci
    -L"~/.wine/drive_c/Development/Qt/4.2.3/lib" -lQtGui -lQtCore
    /usr/lib/gcc/i586-mingw32msvc/3.4.5/../../../../i586-mingw32msvc/bin/ld: cannot find -lQtGui



    QtCore et QtGui se trouve dans usr/include/qt4/Qt
    /.wine/drive_c/Development/Qt/4.2.3/lib ici se trouve Qtcore.prl et QtGui.prl

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'ai un problème à partir de là :
    amalsek@amalsek-desktop:~$ wine qt-win-opensource-4.1.2-mingw.exe
    Où est-ce que je dois installer le programme et quel dossier je dois mettre pour mingw ?

    Merci pour le tuto.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    tout marche bien pour le tuto jusqu'au make qui marche pas du tout et me retourne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    jad@jad-laptop:~/testCrossCompilation$ make
    make -f Makefile.Release
    make[1]: entrant dans le répertoire « /home/jad/testCrossCompilation »
    i586-mingw32msvc-g++ -c -O2 -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I"/usr/local/qt4-win32/include/QtCore" -I"/usr/local/qt4-win32/include/QtGui" -I"/usr/local/qt4-win32/include" -I"." -I"src" -I"build" -I"build" -I"/usr/i586-mingw32msvc/include" -I"/usr/share/qt4/mkspecs/win32-crossCompil-g++" -o build/Form.o src/Form.cpp
    In file included from src/Form.h:4,
                     from src/Form.cpp:1:
    build/ui_Form.h:13:27: error: QtCore/QVariant: Aucun fichier ou dossier de ce type
    build/ui_Form.h:14:25: error: QtGui/QAction: Aucun fichier ou dossier de ce type
    build/ui_Form.h:15:30: error: QtGui/QApplication: Aucun fichier ou dossier de ce type
    build/ui_Form.h:16:30: error: QtGui/QButtonGroup: Aucun fichier ou dossier de ce type
    build/ui_Form.h:17:24: error: QtGui/QLabel: Aucun fichier ou dossier de ce type
    build/ui_Form.h:18:29: error: QtGui/QPushButton: Aucun fichier ou dossier de ce type
    build/ui_Form.h:19:25: error: QtGui/QWidget: Aucun fichier ou dossier de ce type
    In file included from src/Form.cpp:1:
    src/Form.h:5:20: error: QPointer: Aucun fichier ou dossier de ce type
    src/Form.cpp:2:23: error: QCloseEvent: Aucun fichier ou dossier de ce type
    In file included from src/Form.h:4,
                     from src/Form.cpp:1:
    build/ui_Form.h:23: error: expected constructor, destructor, or type conversion before ‘class’
    make[1]: *** [build/Form.o] Erreur 1
    make[1]: quittant le répertoire « /home/jad/testCrossCompilation »
    make: *** [release] Erreur 2
    alors je voudrais bien que vous me montrez la source de mon problème s'il vous plait !

Discussions similaires

  1. Cross-compilation de Qt4
    Par dourouc05 dans le forum Qt
    Réponses: 4
    Dernier message: 13/11/2009, 10h17
  2. Cross-compilation avec GCC 4 sous Windows pour Linux
    Par dourouc05 dans le forum Contribuez
    Réponses: 0
    Dernier message: 08/04/2009, 19h25
  3. compiler qt sous linux et windows
    Par lisco dans le forum Qt
    Réponses: 2
    Dernier message: 09/03/2009, 23h09
  4. [Free Pascal] Cross-compiling Windows -> Linux : comment faire ?
    Par zafo dans le forum Free Pascal
    Réponses: 5
    Dernier message: 01/03/2007, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo