+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Membre habitué

    Inscrit en
    décembre 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : décembre 2010
    Messages : 11
    Points : 133
    Points
    133

    Par défaut Compilation de QMYSQL sous Windows avec MinGW

    La méthode générale pour installer le plug-in QMYSQL est de recompiler entièrement Qt ; or, il existe une technique moins lourde.

    Compilation de QMYSQL sous Windows avec MinGW

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 47
    Points : 71
    Points
    71

    Par défaut

    Avec les versions de gcc > 4, il n'est plus nécessaire d'utiliser dlltool et reimp.

    Il suffit d'utiliser la bibliothèque d'importation, libmysql.lib fournie dans les binaires de mysql, donc en utilisant "-llibmysql" au lieu de "-lmysql" dans l'appel à qmake.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut Problème de compilation du driver MySQL

    Bonjour,

    j'ai suivi la procédure indiquée sur ce site qui me produit bien deux .a et deux .dll que j'ai pris soin de copier dans le dossier sqldrivers de Qt (l'installation ne les copie pas).
    Mais quand je lance mon application, celle-ci n'arrive pas à charger le driver MySQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
    J'ai activé le débug pour les plugins avec QT_DEBUG_PLUGINS et Qt indique que ces plugins ne sont pas valides*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    QFactoryLoader::QFactoryLoader() looking at "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/libqsqlmysql4.a" 
    "The file 'C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/libqsqlmysql4.a' is not a valid Qt plugin." 
             not a plugin 
    QFactoryLoader::QFactoryLoader() looking at "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/libqsqlmysqld4.a" 
    "The file 'C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/libqsqlmysqld4.a' is not a valid Qt plugin." 
             not a plugin 
    QFactoryLoader::QFactoryLoader() looking at "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll" 
    QLibraryPrivate::loadPlugin failed on "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll" : "Cannot load library C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll: La procédure spécifiée est introuvable." 
    "Cannot load library C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll: La procédure spécifiée est introuvable." 
               could not load
    Savez-vous s'il s'agit d'un problème de compilation du driver ou d'installation*?
    Lors de la compilation je ne suis pas sûr des headers et lib MySQL à utiliser, faut il prendre ceux fournis dans connector C, dans Connector C++ ou dans Server*? mais j'ai essayé avec les 3 et à chaque fois j'obtiens le même résultat.

    Merci d'avance
    Xavier.

  4. #4
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 274
    Points : 121 456
    Points
    121 456

    Par défaut



    Le fichier .a n'est pa
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions) ? Contactez-moi par MP.

    Nouveau ! Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 274
    Points : 121 456
    Points
    121 456

    Par défaut



    Le fichier .a n'est pas un plug-in à proprement parler, juste un fichier d'importation de la DLL, tu n'as pas à t'en soucier à moins d'avoir un besoin particulier.

    Tu utilises bien un exécutable en release ? (Oui, chaque plug-in a une clé particulière qui dépend notamment de la version de Qt et du mode de compilation - debug ou release. Si les DLL utilisées par ton exécutable ne sont pas compilées de la même manière, Qt refusera de les charger.)
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions) ? Contactez-moi par MP.

    Nouveau ! Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 47
    Points : 71
    Points
    71

    Par défaut

    Comme il y a une erreur de chargement de la dll, et pas un refus de la charger ("Plugin uses incompatible Qt library..."), peut-être que tu n'as pas copié libmysql.dll dans le bon répertoire ("C:/QtSDK/Desktop/Qt/4.8.0/mingw/bin").

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut

    Merci pour vos réponses rapides*!

    alors pour ce qui est des .a je les ai copié avec les .dll car c'est ce qui est indiqué dans le tuto, il ne faut quand même pas les supprimer*?
    Pour mon exécutable, je le lance à partir de QtCreator et j'ai essayé les deux modes release et debug et ça ne change pas le problème. Dans le mode release Qt cherche bien à me charger qsqlmysql4.dll mais n'y arrive pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QFactoryLoader::QFactoryLoader() looking at "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll" 
    QLibraryPrivate::loadPlugin failed on "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll" : "Cannot load library C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll: La procédure spécifiée est introuvable." 
    "Cannot load library C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll: La procédure spécifiée est introuvable." 
               could not load
    et il reconnait bien que qsqlmysqld4.dll (version de debug si j'ai bien tout compris) ne correspond pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QFactoryLoader::QFactoryLoader() looking at "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysqld4.dll" 
    In C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysqld4.dll:
      Plugin uses incompatible Qt library
      expected build key "Windows mingw release full-config", got "Windows mingw debug full-config"
    "The plugin 'C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysqld4.dll' uses incompatible Qt library. Expected build key "Windows mingw release full-config", got "Windows mingw debug full-config"" 
             not a plugin
    Et en mode debug, j'ai bien le comportement inverse, il a l'air d'essayer de charger la version de debug sans y arriver et rejette bien la version release:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    QFactoryLoader::QFactoryLoader() looking at "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll" 
    In C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll:
      Plugin uses incompatible Qt library
      expected build key "Windows mingw debug full-config", got "Windows mingw release full-config"
    "The plugin 'C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysql4.dll' uses incompatible Qt library. Expected build key "Windows mingw debug full-config", got "Windows mingw release full-config"" 
             not a plugin 
    QFactoryLoader::QFactoryLoader() looking at "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysqld4.dll" 
    QLibraryPrivate::loadPlugin failed on "C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysqld4.dll" : "Cannot load library C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysqld4.dll: La procédure spécifiée est introuvable." 
    "Cannot load library C:/QtSDK/Desktop/Qt/4.8.0/mingw/plugins/sqldrivers/qsqlmysqld4.dll: La procédure spécifiée est introuvable." 
               could not load
    Je suppose donc qu'il faudrait savoir ce que signifie «La procédure spécifiée est introuvable»…

    Pour ce qui est de libmysql.dll j'en ai bien copié un dans C:/QtSDK/Desktop/Qt/4.8.0/mingw/bin mais j'en avais plusieurs d'installés avec MySQL, savez-vous s'il faut prendre la version fournie dans «*MySQL Server 5.5*», dans «*Connector C 6.0.2\lib\debug*», ou dans «*Connector C 6.0.2\lib\opt*»*?
    Je n'ai trouvé aucune information traitant de l'installation de versions récentes de MySQL et n'ai aucune idée de s'il faut utiliser les fichiers «serveur» ou «connecteurs» si vous en savez plus, je suis preneur.

    Merci à vous
    Xavier.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 47
    Points : 71
    Points
    71

    Par défaut

    Il faut prendre le libmysql.dll qui se trouve dans le répertoire que tu as passé à qmake dans la variable "LIBS", donc normalement celui de "*MySQL Server 5.5*".

    Juste pour être sûr, c'est bien MySQL 32 bits que tu as téléchargé ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut

    J'ai pris la dll dans le même dossier que les headers et libs mais je n'ai vu marqué nulle part que c'était bien le dossier serveur et pas un des connecteurs donc j'aurai bien aimé une référence ou une explication claire de qui sert à quoi.

    Pour la version, c'est bien du 32 bits et le serveur fonctionne normalement donc je ne pense pas qu'il y ai de soucis de ce côté là.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut

    Je viens de recompiler les plugins avec les headers et lib de mysql-essential-5.1.61 mais cela ne change rien, j'ai toujours le message «*La procédure spécifiée est introuvable*» au chargement.

    Si quelqu'un a le début d'une idée de solution…
    Merci.

  11. #11
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 274
    Points : 121 456
    Points
    121 456

    Par défaut

    BTW, le journal d'événements Windows n'aurait-il pas quelques informations supplémentaires, au cas où ? (Là, c'est assez sibyllin...)
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions) ? Contactez-moi par MP.

    Nouveau ! Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 47
    Points : 71
    Points
    71

    Par défaut

    En fait, quand il n'y a pas libmysql.dll, l'erreur est "Le module spécifié est introuvable."

    Je viens de recompiler à partir de mysql-5.5.21-win32.zip et il n'y a pas de problème à l'exécution, donc ça doit venir du paquet mysql que tu as téléchargé (ou peut-être de l'UAC de Windows Vista ou 7, ou d'un antivirus).

    Tu n'as besoin que de décompresser les répertoires "lib" et "include", dans "C:\MySQL" par exemple, puis de taper les commandes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    qmake "CONFIG+=build_all" "INCLUDEPATH+=C:/MySQL/include" "QMAKE_LIBDIR+=C:/MySQL/lib/"
    make
    make install
    Le "build_all" sert à compiler et installer les fichiers dll des versions Debug et Release dans le répertoire mingw/bin de Qt, puisque depuis que la structure du SDK a changé, les sources ne sont plus "configurés" et ça ne compile et n'installe que la version Debug par défaut.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut

    J'attendais désespérément une réponse de votre part, en oubliant juste d'avoir posté ma réponse…

    Alors pour le journal d'évènements, il n'y en a aucun à l'heure à laquelle je lance mon application.

    Pour ce qui est de recompiler, j'ai essayé avec tes commandes alexisdm avec une version de mysql réputée marcher et j'ai exactement le même comportement c'est à dire pas de soucis à la compil, des erreurs d'install donc je copie à la main et pas de chargement à l'exécution avec le message « La procédure spécifiée est introuvable ».
    Je vais tester avec la version 5.5.21…

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut

    Je viens d'essayer avec Mysql 5.5.21 et j'ai toujours le même résultat…
    Comme j'ai installé plusieurs environnements Qt est-ce que ça ne peut pas venir d'un soucis de variables environnement*et comment peut on être sûr que toutes les variables nécessaires sont bien positionnées*?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 47
    Points : 71
    Points
    71

    Par défaut

    Tu peux essayer en modifiant le fichier qui lance la console de Qt (C:/QtSDK/Desktop/Qt/4.8.0/mingw/bin/qtenv2.bat ou une copie) pour n'y mettre que les chemins de Qt et de Windows et forcer le QMAKESPEC:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo off
    echo Setting up environment for Qt usage...
    set QTDIR=C:\QtSDK\Desktop\Qt\4.8.0\mingw
    set PATH=C:\QtSDK\mingw\bin;%QTDIR%\bin;%SystemRoot%\System32
    set QMAKESPEC=win32-g++

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut

    J'ai essayé en modifiant les variables comme indiqué et cette fois j'obtiens au make l'erreur*: «*Le point d'entrée de procédure _ZSt9terminatev est introuvable dans la bibliothèque de liens dynamiques libstdc++-6.dll*»
    Est ce que ça ne veut pas dire qu'il manque des choses dans le path*?

  17. #17
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut

    On m'a conseillé d'investiguer l'erreur de chargement du plugin avec le logiciel dependency walker et celui-ci m'indique que 3 dll sont introuvables pour qsqlmysql4.dll*: LIBMYSQL.DLL, MSVCR90.DLL et IESHIMS.DLL
    Pour ce qui est de libmysql, en copiant celui fournit avec MySQL dans le dossier des plugins je n'ai plus d'erreur, par contre je ne comprends pas pourquoi il a besoin d'un fichier relatif à visual C++ (si je ne me trompe pas sur le nom) alors que je compile avec mingw. Faut il modifier quelque chose dans la compil ou faut il copier un msvcr90.dll quelque part (j'en ai plusieurs sur le disque dur)*?
    Enfin je ne me suis pas encore attaqué à ieshims.dll mais si vous avez une idée, je suis preneur…

  18. #18
    Responsable Qt


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherches
    Inscrit en
    août 2008
    Messages
    22 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur de recherches
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 22 274
    Points : 121 456
    Points
    121 456

    Par défaut

    La DLL a été compilée avec VC, c'est pour ça que tu dois chipoter pour l'utiliser avec MinGW. Normalement, installer le bon paquet de redistribuables résout le problème.

    IESHIMS est une DLL d'Internet Explorer et on peut espérer raisonnablement qu'elle soit disponible sur le système de base - disponible dans le dossier %PROGRAMFILES%\Internet Explorer, théoriquement.
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions) ? Contactez-moi par MP.

    Nouveau ! Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  19. #19
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2012
    Messages : 9
    Points : 11
    Points
    11

    Par défaut

    Pourtant c'est moi qui compile qsqlmysql4.dll avec mingw donc je ne comprends pas cette dépendance à VC, s'agit il des restes de ma tentative d'utilisation de visual studio (je fais pourtant un clean avant le make) ou est-ce normal d'avoir cette dépendance (est-ce que ça peut être liée à la dll fournie par MySQL) ?

  20. #20
    Membre régulier

    Homme Profil pro
    Informatique et Electronique
    Inscrit en
    mars 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Informatique et Electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2011
    Messages : 36
    Points : 81
    Points
    81

    Par défaut

    Salut, il faut que le fichier libmysql.dll soit dans un dossier étant le PATH et pas avec les fichiers des plugins, et les fichier *.a des plugins ne sont pas utils pour l'execution ou le chargement de ces derniers.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/01/2015, 09h45
  2. Compilation de QMYSQL sous Win avec MinGW
    Par zebedee dans le forum Contribuez
    Réponses: 0
    Dernier message: 02/12/2010, 12h54

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