Я пытаюсь создать программу qt в Windows 7, которая использует плагин MySQL.
Я без проблем скомпилировал qt и плагин mysql, используя мой 32-битный компилятор minGW.
Однако я продолжаю получать ошибку, подобную этой:
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
Я заранее прошу прощения за то, что очень многословно за то, что я сделал, но я делаю это частично для устранения неполадок, а частично, чтобы другие потерянные души не потеряли три недели на эту конкретную проблему. :)
Вот мои характеристики:
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)
Если вы хотите узнать, как я установил qt, просто следуйте инструкциям этого сайта:
http://www.jiggerjuice.net/software/qt-sql-drivers.html
Эти другие сайты могут содержать некоторые дополнительные сведения:
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 (да, я проверил документы Nokia!)
http://doc.trolltech.com/qq/qq10-windows-deployment.html
Этот парень упомянул о переделке qmake, которой я не буду заниматься, если у меня нет веской причины.
http://christopher.rasch -olsen.no / 2009/04/14 / кварты-45-и-MySQL-плагин-с-MinGW-на-Windows-XP /
Я уже однажды удалил кеш плагинов, надеюсь, мне больше не придется это делать ...
http://doc.trolltech.com/4.2/plugins-howto.html#the-plugin-cache
http://ubuntuforums.org/showthread.php?t=1070155
Если есть какая-то путаница, между двумя вариантами компиляции (создание библиотек mysql статически или в качестве плагина), я выбрал плагин, потому что он компилируется быстрее и мне не нужно беспокоиться о лицензировании.
Как правило, большая проблема mysql для большинства людей заключается в создании библиотеки, совместимой с mingw. Обычно я делал это с помощью инструментов mingw в (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
Я должен был сделать это правильно, поскольку в моем C: \ MySQL \ lib \ opt есть два файла:
libmysql.a
libmysql.lib
LIBMYSQL.def (not a typo)
и в каталоге C: \ MySQL \ bin у меня есть:
libmySQL.bin (not a typo)
Я предварительно скомпилировал плагин mysql:
cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MYSQL\lib\opt\libmysql.lib" mysql.pro
mingw32-make
В результате у меня в папке C: \ QT \ qt \ plugins \ sqldrivers:
libqsqlmysql4.a
libqsqlmysqldq4.a
libqsqlodbc4.a
libqsqlodbcd4.a
qsqlmysql4.dll
qsqlmysqld4.dll
qsqlodbc4.dll
qsqlodbc4.dll
И в моей папке C: \ QT \ bin
QtSql4.dll
QtSqld4.dll
Итак, я предполагаю, с этого сайта (http://www.qtforum.org/article/21352/how-to-compile-use-a-mysql-driver.html), что я правильно понял.
Я не использовал двоичные файлы самой qt, я использовал скомпилированные файлы qt (также от Nokia), но перенастроил и перекомпилировал их, используя mingw32-make. У меня не было ошибок. Это были мои параметры конфигурации для переделки 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
Вот мой .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
Я установил плагин, описанный здесь:
C:\QT\qt
Мои переменные пути:
%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
В командной строке qt добавлено несколько дополнительных функций, поэтому я сделал все это в командной строке.
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)
Хотя я либо все это уже сделал, либо это излишне. Я добавляю это только для полноты картины.
Вот мой код (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 );
}
Очень просто, да?
Я пошел в свой каталог с примером кода, запустив
mingw32-make distclean
qmake
mingw32-make
и получите сообщение об ошибке выше. Я пытался создать версию только с версией выпуска (без отладки), и она по-прежнему показывает то же сообщение, но с «не могу найти -lqsqlmysq», так что это не так.
Я пробовал много вещей, но где мне искать дальше, чтобы решить это; может быть, кто-то может сузить его для меня, поставить меня на правильный путь или, что еще лучше, решить его надоедливую проблему.
Кроме того, я планирую использовать привязки Python с моим кодом (мне нужен PyQT + MySQL). Если предложенное решение помешает мне сделать это, дайте мне знать.