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

MinGW Discussion :

Problème avec l'execution sous MinGW


Sujet :

MinGW

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Professeur de Mathématiques
    Inscrit en
    Janvier 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Professeur de Mathématiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Problème avec l'execution sous MinGW
    Bonjour à tous,

    Je suis débutant sous C++. J'avais commencé une compilation sous MSVC qui s'executait sous souci (sous Qt Editor). Mais au moment de déployer, j'ai eu un problème de dll manquantes que je n'ai pas réussi à résoudre (cf discussion https://www.developpez.net/forums/d2.../#post11541602). Je me suis donc dit que j'allais essayer sous MinGW. Et là, l'application se lance, y compris en-dehors de l'éditeur, mais il ne trouve pas le fichier texte qu'il est censé lire (il contient des données pour l'application). Pourtant, l'execution avec MSVC marchait et j'ai vérifié le dossier d'execution, qui reste le même.

    AUriez-vous une idée du problème?

    Cordialement,
    Enheduana

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Oui 1 idée Lorsque tu travailles avec Qt, pour des raisons de licence GPL, tu es obligé de trimbaler avec l'exécutable au moins 4 bibliothèques .DLL à mettre au même niveau que ton exécutable

    Utilise 1 logiciel comme Dependency Walker sur ton exécutable pour te renseigner quelles bibliothèques il lui faut (<- lien officiel)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Professeur de Mathématiques
    Inscrit en
    Janvier 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Professeur de Mathématiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour foetus,

    Merci pour ta réponse. Ceci dit, je comprends peut-être mal, mais je ne pense pas que ce soit le souci. L'application se lance très bien, donc j'imagine qu'elle a toutes les bibliothèques. Mais, au début du code, elle doit lire un fichier xml, qui contient les données dont elle aura besoin. Le code prévoit que si le fichier n'a pas pu être ouvert, un message d'erreur est renvoyé (une QMessageBox::warning) et l'application s'arrête ensuite.
    Or, j'obtiens le message d'erreur en question. Donc j'imagine qu'il ne trouve pas le fichier.
    Or la chose bizarre, que je ne m'explique pas, est qu'avec MSVC, il trouvait le fichier.

    J'ai indiqué le chemin vers le fichier de façon relative (ifstream("anecdotes.xml")) car le fichier se trouve dans le dossier courant (que j'ai vérifié avec un QMessageBox::information(this,"titre quelconque",QDir::currentPath()))

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    En réalité c'est impossible de te suivre sans le code

    Pour ton problème de déploiement, c'est 1 problème de bibliothèques .DLL Qt qu'il faut trimbaler.

    Pour ton problème de fichier non trouvé, commence par faire du vrai code ifstream(QDir::currentPath() + "anecdotes.xml").
    Tu peux également trouver le chemin de ton exécutable avec le paramètre argv[0] du main qui contient "[chemin]\[nom_exec].exe" (<- il faut chercher le dernier "backslash"/ le + à droite pour extraire le chemin)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Professeur de Mathématiques
    Inscrit en
    Janvier 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Professeur de Mathématiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Désolé de ne pas avoir envoyé le code source.

    Je te récopie la partie qui me semble importante, pour ne pas alourdir, mais dis-moi si tu penses qu'il y a besoin d'autres choses.
    (Note je me suis confondu avant: j'utilise aussi ifstream pour ouvrir un fichier texte, mais plus loin dans le code. Le problème vient déjà du fichier xml qu'il ne trouve pas. J'utilise tinyxml)
    L'application est destiné à afficher des petites histoires.
    Alors, dans l'initialisation de la classe qui hérite de QMainWindow:

    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
     
    Tiramisuv2::Tiramisuv2(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::Tiramisuv2)
    {
     
        //Intialisation des données
        const QString chemin_fichier_xml = QDir::currentPath()+"anecdotes.xml";
        const char* chemin = chemin_fichier_xml.toStdString().c_str();
        donnees_xml = new donnees(chemin);
        if (!donnees_xml->return_etat_fichier())//return_etat_fichier renvoi false si le fichier xml n'a pas pu être chargé
        {
            QMessageBox::warning(this,"Erreur!","Fichier introuvable");
            //qApp->quit();
        }
    //.....
    j'ai défini la classe donnee dans un autre fichier
    La classe donnée comporte un ensemble d'objet de type anecdote. Chaque instance d'anecdote comporte une histoire et est caractérisé par le texte de l'histoire et par un char caractérisant le type d'anecdote.
    Fichier .h
    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
     
    class donnees
    {
    public:
        donnees(const char* nom_fichier = "anecdotes.xml");
        int nb_elements() const;
        QString lire(int i) const;
        char lire_type(int i) const;
        void ajouter(char typea, QString phrase_a_ajouter, int i = 1);
        void enregistrer();//A implémenter
        void ajouter_anecdote(char type, QString tt);
        void actualiser(char type, QString tt, int i);
        bool return_etat_fichier() const; //renvoie la valeur de fichier_charge
    private:
        TiXmlDocument document;
        bool fichier_charge; //est mis à true si le fichier xml s'est correctement chargé, false sinon. 
        int nb_elemts;
        std::vector<anecdote> anecdotes;
        const char* nom_xml;
    };
    et le fichier .cpp
    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
     
    donnees::donnees(const char* nom_fichier)
    {
        TiXmlDocument doc(nom_fichier);
        if (!doc.LoadFile())
        {
     
            fichier_charge=false;
        }
        else
        {
        TiXmlHandle hdl(&doc);
        TiXmlElement *elem = hdl.FirstChildElement().FirstChildElement().Element();
        QString texte_lu;
        char type_lu;
        string temp_lu;
        int i(0);
        while (elem!=NULL)
        {
            temp_lu = elem->Attribute("type");
            type_lu = temp_lu[0];
            texte_lu = elem->GetText();
            anecdotes.push_back(anecdote(type_lu, texte_lu));
            i++;
            elem=elem->NextSiblingElement();
        }
        nb_elemts = i;
        document = doc;
        nom_xml = nom_fichier;
        fichier_charge=true;
        }
    }
    Merci pour ton aide, j'apprécie!

Discussions similaires

  1. problème avec formulaire et sous formulaire
    Par Lnjam dans le forum Access
    Réponses: 2
    Dernier message: 28/01/2006, 17h52
  2. Problème avec un diapo sous IE
    Par Mucsy dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 06/01/2006, 00h40
  3. problème avec les div sous Mozilla
    Par MrsFrizz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/10/2005, 11h54
  4. problème avec z-index sous firefox ???
    Par SpaceFrog dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/09/2005, 20h39
  5. [Sybase]Problème avec le BCP sous Solaris
    Par sl dans le forum Sybase
    Réponses: 3
    Dernier message: 09/09/2004, 07h56

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