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
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
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.
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
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 QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
Savez-vous s'il s'agit d'un problème de compilation du driver ou d'installation*?
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
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.
Le fichier .a n'est pa
Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
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 (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.
Créer des applications graphiques en Python avec PyQt5
Créer des applications avec Qt 5.
Pas de question d'ordre technique par MP !
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").
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:
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 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 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 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
Je suppose donc qu'il faudrait savoir ce que signifie «La procédure spécifiée est introuvable»…
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
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.
Partager