J'essaye de faire un programme qt sur Windows 7 qui utilise un plugin MySQL.Win7 MInGW QT programme MySQL cris "ne peut pas trouver -lqsqlmysqld"; où est la bibliothèque manquante?
J'ai compilé à la fois qt et le plugin mysql sans problème en utilisant mon compilateur minGW 32 bits.
Cependant, je continue à obtenir une erreur comme ceci:
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Users/dhatt/Desktop/testdb2'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN - I"..\..\..\..\QT\qt\include\QtCore" -I"..\..\..\..\QT\qt\include\QtGui" -I"..\..\..\..\QT\qt\include\QtSql" -I"..\..\..\..\QT\qt\include" -I"..\..\..\..\MySQL\bin" -I"..\..\..\..\QT\qt\include\ActiveQt" -I"debug" -I"..\..\..\..\QT\qt\mkspecs\win32-g++" -o debug\database.o database.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\testdb2.exe debug/database.o -L"c:\QT\qt\lib" -lmingw32 -lqtmaind -L C:\MySQL\lib\opt -LC:/QT/qt/plugins/sqldrivers -lqsqlmysqld -lQtSqld4 -lQtGuid4 -lQtCored4 -LC:\MySQL\lib\opt
C:/qt/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lqsqlmysqld
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\executable.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Users/dhatt/Desktop/testdb2'
mingw32-make: *** [debug] Error 2
je présenter des excuses à l'avance pour être très bavard de ce que je faisais, mais je fais cela en partie pour le dépannage, et en partie pour tout autre perdu les âmes ne finissent pas par perdre trois semaines sur ce problème particulier. :)
Voici mes spécifications:
Windows 7 Nokia's Open Source QT
Qt SDK for Windows (C:\Qt\2010.04\qt)
Linux MinGW Version 5.1.6 (C\Linux\MinGW)
MySQL5 with C++ files (C:\MySQL5)
Si vous voulez savoir comment j'ai installé qt, il suffit de suivre les instructions de ce site:
http://www.jiggerjuice.net/software/qt-sql-drivers.html
Ces autres sites peuvent contenir des fonctionnalités supplémentaires information tidbits:
http://doc.qt.nokia.com/4.6/sql-driver.html
http://www.rag.com.au/linux/qt4howto.html
http://qtnode.net/wiki?title=Qt4_on_Windows (oui, j'ai vérifié avec les documents de Nokia !!!)
http://doc.trolltech.com/qq/qq10-windows-deployment.html
Cet homme mentionné au sujet refaisant qmake, que je ne fais pas à moins d'avoir une bonne raison.
http://christopher.rasch-olsen.no/2009/04/14/qt-45-and-mysql-plugin-with-mingw-on-windows-xp/
je l'ai déjà supprimé le cache du plug-in une fois, je l'espère, je n'aurai pas à le faire à nouveau ...
http://doc.trolltech.com/4.2/plugins-howto.html#the-plugin-cache
http://ubuntuforums.org/showthread.php?t=1070155
Si C'est une confusion, entre les deux options de compilation (créer les bibliothèques mysql statiquement, ou en plugin), j'ai choisi pour le plugin car il compile plus vite et je n'ai pas à me soucier de la licence.
Généralement, le gros problème de mysql pour la plupart des gens est de faire une bibliothèque compatible mingw. Généralement, je l'ai fait avec les outils de mingw dans (https://olex.openlogic.com/packages/mingw-utils) ...
c:\> cd MySQL\lib\opt
c:\mysql\lib\opt> reimp -d libmysql.lib
c:\mysql\lib\opt> dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a -k
Je l'ai fait droit puisque dans mon C: \ MySQL \ lib \ opt, il a les deux fichiers:
libmysql.a
libmysql.lib
LIBMYSQL.def (not a typo)
et dans le répertoire C: \ MySQL \ bin, je ai:
libmySQL.bin (not a typo)
j'avais compilé le plugin mysql préalable:
cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MYSQL\lib\opt\libmysql.lib" mysql.pro
mingw32-make
En conséquence, j'ai dans mon C: \ QT \ qt \ plugins \ sqldrivers dossier:
libqsqlmysql4.a
libqsqlmysqldq4.a
libqsqlodbc4.a
libqsqlodbcd4.a
qsqlmysql4.dll
qsqlmysqld4.dll
qsqlodbc4.dll
qsqlodbc4.dll
Et dans mon C: \ QT \ bin
QtSql4.dll
QtSqld4.dll
Donc, je suppose de ce site (http://www.qtforum.org/article/21352/how-to-compile-use-a-mysql-driver.html) que j'ai bien compris.
Je n'ai pas utilisé les binaires de qt lui-même, j'ai utilisé les fichiers qt compilés (également de Nokia), mais les ai reconfigurés et recompilés en utilisant mingw32-make. Je n'ai eu aucune erreur. C'était mes options de configuration pour refaire qt.
-opensource
-nomake examples
-nomake demos
-no-sql-lite
-no-qt3support
-no-gif
-no-libpng
-no-libmng
-no-libtiff
-no-phonon
-no-phonon-backend
-no-multimedia
-no-audio-backend
-no-webkit
-no-script
-no-scripttools
-nodeclarative
-plugin-sql-mysql -l mysql -I C:\QT\qt\include -L C:\QT\qt\lib\opt
Voici mon fichier .pro
LANGUAGE = C++
TEMPLATE = app
TARGET = executable
QT += core sql
QTPLUGIN += qsqlmysql
DEPENDPATH += .
INCLUDEPATH += C:\MySQL\bin
LIBS += -L C:\MySQL\lib\opt -lmysql
# Input
SOURCES += database.cpp
J'ai installé le plugin décrit ici:
C:\QT\qt
Mes variables de chemin sont:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Python26;C:\Linux\Cygwin\bin;C:\mingw-utils-0.3\bin;C:\QT\qt\bin;C:\MySQL\bin;C:\MySQL\include;C:\QT\mingw32\bin;C:\QT\mingw\bin;C:\QT\qt\plugins\sqldrivers
La commande qt invite ajouté un peu plus, si je l'ai fait tout cela dans l'invite de commande.
Setting up a MinGW/Qt only environment...
-- QTDIR set to C:\QT\qt
-- PATH set to C:\QT\qt\bin
-- Adding C:\QT\bin to PATH
-- Adding C:\Windows\System32 to PATH
-- QMAKESPEC set to win32-g++ (mingw is my only compiler so, this is unnecessary)
Bien que je l'aie déjà fait ou que ce soit redondant. Je n'ajoute cela que pour l'exhaustivité.
Voici mon code (database.cpp):
#include <QtSql>
#include <iostream>
using namespace std;
int main(int argc, char ** argv)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("---.---.---.---");
db.setDatabaseName("--------");
db.setUserName("------------");
db.setPassword("------------");
if (!db.open()) cout << "Failed to connect to mysql" << endl;
else cout << "Works finally." << endl;
QSqlDatabase::removeDatabase("QMYSQL");
exit (0);
}
Très simple, oui?
Je suis allé à mon répertoire avec le code exemple, exécutez
mingw32-make distclean
qmake
mingw32-make
et obtenez le message d'erreur ci-dessus. J'ai essayé de construire une version avec la version de version seulement (pas de débogage), et il montre toujours le même message, mais avec "ne peut pas trouver -lqsqlmysq", ainsi ce n'est pas cela.
J'ai essayé beaucoup de choses, mais où devrais-je regarder à côté pour le résoudre; peut-être que quelqu'un peut l'affiner pour moi, me mettre sur le bon chemin, ou mieux encore, résoudre son problème ennuyeux.
Aussi, je prévois d'utiliser des liaisons python avec mon code (j'ai besoin de PyQT + MySQL). Si la solution proposée m'empêche de le faire, faites le moi savoir.