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 actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 204
    Points : 226
    Points
    226
    Par défaut Compilation release / debug avec des extensions
    Bonjour
    j ai developpé une appli qui fonctionne bien sous linux et windows en mode debug à partir de Qt Creator.
    J'ai développé plusieurs plugins avec Qt aussi pour cette appli.
    Tout marche bien sur linux
    Tout marche bien quand j execute l'appli a partir de Qt Creator en mode debug sur windows 10
    Mais quand je compile l'appli et que je l'exécute de Qt Creator ou en dehors, elle fonctionne mais ne trouve pas les plugins.
    pourtant la structure de rangement des fichiers de mon programme et des dll de mes plugins est strictement identique à celle de la version debug.
    Je ne comprends pas pour quoi l appli ne trouve pas les plugins en mode release?
    Quelqu'un aurait une piste?
    Merci
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    24 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 24 566
    Points : 181 367
    Points
    181 367
    Billets dans le blog
    51
    Par défaut
    Bonjour,

    Peut être vous avez mis un chemin en dur (ou chemin absolu).
    Sinon, vous devriez tenter d'ajouter des qDebug pour déboguer avec des messages de sortie (que vous placerez dans un log).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 204
    Points : 226
    Points
    226
    Par défaut
    Merci de la réponse LittleWhite.
    Je vais faire ça et je vous dirai ce que ça donne.
    Mais je me demande ce qui peut changer en passant du débug au release. Je suis assez surpris.
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    24 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 24 566
    Points : 181 367
    Points
    181 367
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par katanaenmousse Voir le message
    Mais je me demande ce qui peut changer en passant du débug au release. Je suis assez surpris.
    Et pourtant, cela arrive plutôt souvent. Notamment, en debug, les variables non initialisées sont mises à zéro par défaut mais pas en release. En release, des optimisations (notamment, des manipulations du code) sont réalisées. Aussi, j'ose croire qu'il y a aussi les pages mémoire réservés au programme qui sont plus laxistes. Et finalement, les chemins changent, car vous n'exécutez plus dans le dossier debug, mais dans le dossier release.
    Donc, en bref, il y a pas mal de petites choses qui peuvent l'expliquer.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 204
    Points : 226
    Points
    226
    Par défaut
    C est noté.
    Merci pour cet éclairage.
    Normalement mes variables sont toutes déclarées.
    Pour les chemins de dossiers debug et release c est intégré dans le code par un if et ça fonctionne (j ai vérifié avec qDebug)
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  6. #6
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 204
    Points : 226
    Points
    226
    Par défaut
    J'ai mis des qDebug() pour visualiser ce qui se passait dans mon chargeur de plugins.

    En fait mon appli principale présente tous les fichiers dll du dossier plugins à mon chargeur de plugin (QPluginLoader loader)
    J'ai mis un qDebug() pour vérifier le fichier qui est présenté à QPluginLoader et 3 dll sont bien présentés.
    Sauf qu'un seul (le dernier) se charge correctement.

    Dans mon code en dessous, ajouterMessage est un qDebug() amélioré vu que je n'ai aucun qDebug() ( je suis en release )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    foreach(QString file, pluginsDir.entryList(QDir::Files)) {
            QPluginLoader loader(pluginsDir.absoluteFilePath(file));
            ajouterMessage("1 - loader : "+pluginsDir.absoluteFilePath(file));
            if (QObject *pplugin=loader.instance()) {
                ajouterMessage("2 - Instance du Plugin créée pour :"+pluginsDir.absoluteFilePath(file));
                InterfacePlugin *pmonPlugin=qobject_cast<InterfacePlugin *>(pplugin);
                if (pmonPlugin){
                    ajouterMessage("3 - Succès pour : "+pluginsDir.absoluteFilePath(file));
                }
            }
    }
    Mes trois dll sont bien présentés au loader mais seul le dernier fichier dll est chargé et va bien à mon qDebug 3.
    Pourquoi pas pour les 2 dll précédents? Je ne sais pas...

    Le plus étonnant c'est que quand je lance le code dans QtCreator en release tous mes plugins se chargent parfaitement.
    C'est seulement quand je veux double cliquer sur mon .exe sans passer par Qt Creator qu'un seul plugin se charge... Je ne comprends pas...
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    24 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 24 566
    Points : 181 367
    Points
    181 367
    Billets dans le blog
    51
    Par défaut
    Hum, mis à part que les pointeurs ne sont pas conservés et qu'à chaque boucle on les écrase, je ne vois pas.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2008
    Messages : 204
    Points : 226
    Points
    226
    Par défaut
    Oui, les pointeurs écrasés c'est pas grave. du moment qu'ils durent pendant la boucle. Dans la boucle j'associe le plugin aux actions d'un menu et je n'ai plus besoin des pointeurs après ça.

    Mais j ai trouvé le problème.
    Je partais du principe que lorsque vous lancez votre .exe sur Windows, il vous demandait les dll manquantes. C est vrai. Mais il ne les demande pas toutes!!!

    Moi il manquait simplement une dll de Qt avec mon exe. C était Celle qui gère le xml
    Une fois ajoutée tout fonctionne sur tous les PC Windows 10 32 ou 64 bits.

    Voilà
    C est simplement pour ça que mon plugin n était pas chargée par mon appli principale

    Merci tout de meme de ton aide LittleWhite
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb. pour compiler un programme avec des *.h
    Par goran kajfes dans le forum Débuter
    Réponses: 4
    Dernier message: 13/05/2009, 23h22
  2. [MySQL] Erreur : Vous devez compiler votre php avec l'extension MySQL (IIS, PHP, MySQL, GLPI)
    Par Otimov dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/02/2009, 17h00
  3. Réponses: 3
    Dernier message: 15/05/2008, 10h17
  4. Compilation en debug avec des lib en release
    Par Aradesh dans le forum MFC
    Réponses: 2
    Dernier message: 05/01/2007, 11h47
  5. Compiler en debug avec une librairie en release
    Par Philippe320 dans le forum MFC
    Réponses: 4
    Dernier message: 25/11/2005, 18h33

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