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

  1. #1
    Membre expert
    Crash pendant la compilation de la bibliothèque QxOrm avec MinGW sous Windows
    Bonjour,

    Pour ceux qui ont des soucis pour compiler QxOrm avec MinGW sous Windows (crash du process cc1plus.exe) : les versions récentes de MinGW (4.8+) ont un bug connu avec les en-têtes précompilés de taille importante (large precompiled header).
    Plus d'infos sur ce bug ici : https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56926
    Et ici : http://stackoverflow.com/questions/1...ed-header-file

    Les packages actuels de Qt (Qt 5.3 et Qt 4.8.6) sont livrés avec MinGW 4.8.2, version qui contient ce bug avec les en-têtes précompilés !
    Pour ceux qui ne peuvent pas changer de compilateur (MSVC++ ou bien MinGW 4.7 par exemple), vous pouvez télécharger la version BETA de QxOrm 1.3.1 : http://www.qxorm.com/version/QxOrm_1....1_BETA_06.zip

    Cette version BETA supporte une nouvelle option de compilation : _QX_NO_PRECOMPILED_HEADER
    Pour activer cette option, ouvrir le fichier de configuration QxOrm.pri, puis dé-commenter la ligne suivante (fin du fichier) :
    DEFINES += _QX_NO_PRECOMPILED_HEADER

    Cette option désactive automatiquement les en-têtes précompilés, et QxOrm fonctionne ainsi correctement avec MinGW 4.8.2.
    Attention, les temps de compilation seront certainement plus longs avec cette option activée !

    Remarque : ce problème apparaît uniquement sous Windows (MinGW 4.8+), il n'y a aucun soucis sous Linux ou bien Mac OS X.

    EDIT : voici une version BETA de QxEntityEditor (1.1.7 BETA 03) qui supporte la nouvelle option de compilation _QX_NO_PRECOMPILED_HEADER :
    http://www.qxorm.com/version/QxEntit...03_win_32b.zip
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  2. #2
    Membre à l'essai
    Bonjour.

    Je suis en charge dans un soucis de simplicité de faire compiler notre projet sous mingw. J'ai réussi à compiler la librairie ainsi que le core du projet QxOrm, les services et les modèles générés via QxEntityEditor. En revanche, lorsque je compile le projet qui utilise QxOrm (une application serveur dans le cas présent), j'ai des erreurs d'export introuvable :

    C:\Users\VM1\Documents\LIMA\Cores\limaCore\include\Session.gen.h:11: erreur : variable 'LIMACORE_EXPORT Session' has initializer but incomplete type
    class LIMACORE_EXPORT Session
    Sauriez vous comment régler le problème sans avoir à rajouter l'include de precompiled.h dans chaque fichier générés ?

  3. #3
    Membre expert
    dans un soucis de simplicité
    Honnêtement, sous Windows, je recommande d'utiliser MSVC++.
    Mais bon, rien ne t'empêche d'utiliser MinGW si tu le souhaites...

    J'ai réussi à compiler la librairie ainsi que le core du projet QxOrm, les services et les modèles générés via QxEntityEditor.
    Sauriez vous comment régler le problème sans avoir à rajouter l'include de precompiled.h dans chaque fichier générés ?
    D'après ce que je comprends :
    - compilation de QxOrm + tout le code généré par QxEntityEditor => OK
    - compilation de ton projet qui dépend de QxOrm et le code généré => KO, c'est bien ça ?

    Il ne faut surtout pas inclure precompiled.h dans les fichiers d'en-tête (headers), ce n'est pas fait pour ça !

    Dans ton projet, il faut certainement que tu fasses un precompiled header propre à ton projet.
    Et définir dedans la variable LIMACORE_EXPORT, ou bien inclure la définition de cette variable qui doit être présente dans un des fichiers d'export générés par QxEntityEditor.
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  4. #4
    Membre à l'essai
    Honnêtement, sous Windows, je recommande d'utiliser MSVC++.
    Eh bien le problème c'est de devoir installer Visual Studio en fait

    D'après ce que je comprends :
    - compilation de QxOrm + tout le code généré par QxEntityEditor => OK
    - compilation de ton projet qui dépend de QxOrm et le code généré => KO, c'est bien ça ?

    Il ne faut surtout pas inclure precompiled.h dans les fichiers d'en-tête (headers), ce n'est pas fait pour ça !

    Dans ton projet, il faut certainement que tu fasses un precompiled header propre à ton projet.
    Et définir dedans la variable LIMACORE_EXPORT, ou bien inclure la définition de cette variable qui doit être présente dans un des fichiers d'export générés par QxEntityEditor.
    C'est bien ça.
    Le problème est que j'ai du désactiver les headers précompilés via _QX_NO_PRECOMPILED_HEADER pour éviter le crash lors de la compilation. Option que je prend également en compte dans mon .pro pour ne pas inclure de headers précompilés :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    !contains(DEFINES, _QX_NO_PRECOMPILED_HEADER) {
    PRECOMPILED_HEADER = ./precompiled.h
    }


    Du coup, je me retrouve avec des erreurs dans les fichiers générés, car il ne connait plus LIMACORE_EXPORT notamment. Pour contourner ce problème, j'ai rajouté ceci dans un fichier généré pour que cela puisse compiler.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    #include <QxOrm.h>
    #include "LimaCore_export.gen.h"


    Connaîtrais tu une solution alternative que de toucher au fichier générés ?

    EDIT : Le problème est résolu en faisant mes includes de qxorm et du fichier d'export avant d'inclure le fichier généré qui posait problème. Merci !

  5. #5
    Membre expert
    Le problème est résolu en faisant mes includes de qxorm et du fichier d'export avant d'inclure le fichier généré qui posait problème. Merci !
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.