Russian Qt Forum
Сентябрь 30, 2024, 02:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT + MySQL  (Прочитано 10634 раз)
hamlo
Гость
« : Сентябрь 16, 2009, 09:21 »

Изибтая уже тема

http://wiki.qtcentre.org/index.php?title=Building_the_QMYSQL_plugin_on_Windows_using_MinGW

Собирал так

в результате вид mysql.pro

Код:
QT += sql
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += . "D:\MySQL\include"
LIBS += "D:\MySQL\lib\opt\libmysql.a"

# Input
HEADERS += ../../../sql/drivers/mysql/qsql_mysql.h
SOURCES += main.cpp ../../../sql/drivers/mysql/qsql_mysql.cpp

И полный вывод компилятора

Цитировать
Running build steps for project mysql...
Configuration unchanged, skipping QMake step.
Starting: D:/Qt/2009.03/mingw/bin/mingw32-make.exe -w
mingw32-make: Entering directory `D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
D:/Qt/2009.03/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\main.o main.cpp
D:/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\mysql\qsql_mysql.cpp -o debug\qsql_mysql.moc
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\qsql_mysql.o ..\..\..\sql\drivers\mysql\qsql_mysql.cpp
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In constructor `QMYSQLDriver::QMYSQLDriver(QObject*)':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1092: warning: non-inline function 'QMYSQLDriver::QMYSQLDriver(QObject*)' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In constructor `QMYSQLDriver::QMYSQLDriver(MYSQL*, QObject*)':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1104: warning: non-inline function 'QMYSQLDriver::QMYSQLDriver(MYSQL*, QObject*)' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: At global scope:
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1122: warning: non-inline function 'void QMYSQLDriver::init()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1122: warning: 'void QMYSQLDriver::init()' defined locally after being referenced with dllimport linkage
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In destructor `virtual QMYSQLDriver::~QMYSQLDriver()':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1129: warning: non-inline function 'virtual QMYSQLDriver::~QMYSQLDriver()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::hasFeature(QSqlDriver::DriverFeature) const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1137: warning: non-inline function 'virtual bool QMYSQLDriver::hasFeature(QSqlDriver::DriverFeature) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::open(const QString&, const QString&, const QString&, const QString&, int, const QString&)':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1203: warning: non-inline function 'virtual bool QMYSQLDriver::open(const QString&, const QString&, const QString&, const QString&, int, const QString&)' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: At global scope:
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1292: warning: non-inline function 'virtual void QMYSQLDriver::close()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QSqlResult* QMYSQLDriver::createResult() const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1305: warning: non-inline function 'virtual QSqlResult* QMYSQLDriver::createResult() const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QStringList QMYSQLDriver::tables(QSql::TableType) const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1310: warning: non-inline function 'virtual QStringList QMYSQLDriver::tables(QSql::TableType) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QSqlIndex QMYSQLDriver::primaryIndex(const QString&) const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1333: warning: non-inline function 'virtual QSqlIndex QMYSQLDriver::primaryIndex(const QString&) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: At global scope:
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1359: warning: non-inline function 'virtual QSqlRecord QMYSQLDriver::record(const QString&) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QVariant QMYSQLDriver::handle() const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1375: warning: non-inline function 'virtual QVariant QMYSQLDriver::handle() const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::beginTransaction()':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1380: warning: non-inline function 'virtual bool QMYSQLDriver::beginTransaction()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::commitTransaction()':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1397: warning: non-inline function 'virtual bool QMYSQLDriver::commitTransaction()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::rollbackTransaction()':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1414: warning: non-inline function 'virtual bool QMYSQLDriver::rollbackTransaction()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QString QMYSQLDriver::formatValue(const QSqlField&, bool) const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1431: warning: non-inline function 'virtual QString QMYSQLDriver::formatValue(const QSqlField&, bool) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: At global scope:
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1465: warning: non-inline function 'virtual QString QMYSQLDriver::escapeIdentifier(const QString&, QSqlDriver::IdentifierType) const' is defined after prior declaration as dllimport: attribute ignored
In file included from ..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1476:
debug/qsql_mysql.moc:72:26: warning: no newline at end of file
D:/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\mysql\qsql_mysql.h -o debug\moc_qsql_mysql.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\moc_qsql_mysql.o debug\moc_qsql_mysql.cpp
debug\moc_qsql_mysql.cpp:38: error: definition of static data member 'QMYSQLDriver::staticMetaObject' of dllimport'd class
debug\moc_qsql_mysql.cpp:38: warning: 'QMYSQLDriver::staticMetaObject' defined locally after being referenced with dllimport linkage
mingw32-make[1]: Leaving directory `D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
mingw32-make: Leaving directory `D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
mingw32-make[1]: *** [debug/moc_qsql_mysql.o] Error 1
mingw32-make: *** [debug] Error 2
Exited with code 2.
Error while building project mysql
When executing build step 'Make'

Вот ошибка
Цитировать
D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql/debug/moc_qsql_mysql.cpp:38: error: definition of static data member 'QMYSQLDriver::staticMetaObject' of dllimport'd class

Если так продолжится - уйду на C# или Java

Помогите! Я уже винду снес и поставил по новой, чтобы он ODBC драйвер увидел. Теперь мускульный перестал видеть и не собирает, а у меня проект горит!

« Последнее редактирование: Сентябрь 16, 2009, 09:28 от hamlo » Записан
Rcus
Гость
« Ответ #1 : Сентябрь 16, 2009, 09:38 »

Хм, в статье по ссылке ничего не говорится о редактировании .pro файла. Он теперь совсем не походит на то что в оригинале было.
Цитировать
Если так продолжится - уйду на C# или Java
/* испугался и открыл секреты решения всех проблем */
Записан
hamlo
Гость
« Ответ #2 : Сентябрь 16, 2009, 09:40 »

Смысл всех изменений в статье сводится именно к этому...
Пока пойду опять перставлю QT опять...

Нашел вот что

http://qt.shamangrad.net/doku.php?id=%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D1%8B_%D0%B1%D0%B0%D0%B7_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_sql

Но и те драйвера не видит!

http://qt.shamangrad.net/lib/exe/fetch.php?media=drivers:mysql.rar

 Непонимающий
« Последнее редактирование: Сентябрь 16, 2009, 09:42 от hamlo » Записан
hamlo
Гость
« Ответ #3 : Сентябрь 16, 2009, 09:49 »

Дайте плз линк на драйвера для 4.5.2 Qt. Самый простой выход. Буду безмерно благодарен.

ЗЫ После сборки по инструкции опять эта ошибка, причем пробовал на 3-ех машинах.
Записан
Rcus
Гость
« Ответ #4 : Сентябрь 16, 2009, 10:00 »

Самый простой выход это точно следовать инструкции и не править mysql.pro руками.
Удаление include(../qsqldriverbase.pri) привело в конечном счете к ошибке сборки /* здесь был абзац о том как именно это влияет, но он вырезан внутренним троллем */
Записан
hamlo
Гость
« Ответ #5 : Сентябрь 16, 2009, 10:04 »

qpluginbase.pri - на месте (но 1 уровень выше). Без изменения pro файла QT += sql или без включения к qmake "INCLUDEPATH+=D:\Qt\2009.03\qt\src\sql\kernel" получаем в консоль

Код:
D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql/main.cpp:42: qsqldriverplugin.h: No such file or directory

Если делать по шагам, то ткните меня носом, чт оя мог упустить в трех командах. Вот новая винда и вот я из SDK ставлю Qt.

Качаю mingw-utils

Добавляю в переменную path где она может найти qmake и mingw32-make (пути до папок qt и mingw в них папки bin).

Добавляю путь до mingw-utils, чтобы виделось reimp.exe

далее делаю reimp libmysql.lib (который получаю из установщика MySQL) для получения совместимого .a файла, требуемого для сборки либы для QT

далее в Makefile (в  директории сборки mysql driver %qtdir%/src/plugins/sqldrivers/mysql) добавляю пути (INCLUDEPATH +=) где можно найти заголовочный файлы mysql и путь непосредсвенно до самой .a библиотеки.

Далее пытаюсь собрать с помощью mingw32-make -f Makefile (тот самый мейк фаил в котором указаны пути до заголовочных файлов и мускульная .a либа). Ясенно нигде не указано где искать заголовочные файлы QtSql модуля и получаем вышеприведенную ошибку.

При попытке указать их расположение явно, получаем какую то тарабарщину... Все.



« Последнее редактирование: Сентябрь 16, 2009, 10:17 от hamlo » Записан
Rcus
Гость
« Ответ #6 : Сентябрь 16, 2009, 10:12 »

Эм на каком месте? Он не включается напрямую в mysql.pro, а в qsqldriverbase.pri уже есть строка QT = core sql.
Записан
hamlo
Гость
« Ответ #7 : Сентябрь 16, 2009, 10:18 »

Выложите плз сборку мускульных дров для 4.4.2.....  Плачущий

ЗЫ По вышеприведенной ссылке есть дрова для 4.3.4... оч не хочется решать все что связно с Qt какими то костылями и откатами до старых версий...
« Последнее редактирование: Сентябрь 16, 2009, 10:21 от hamlo » Записан
hamlo
Гость
« Ответ #8 : Сентябрь 16, 2009, 10:43 »

Ппц... поставил SDK на диск C:/ Все собралось - но драйвера так и не видит... Это ваще логика где?
« Последнее редактирование: Сентябрь 16, 2009, 10:46 от hamlo » Записан
hamlo
Гость
« Ответ #9 : Сентябрь 16, 2009, 11:11 »

Ну да что же это за такое!

Код:
C:\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>mingw32-make install
mingw32-make -f Makefile.Debug install
mingw32-make[1]: Entering directory `C:/Qt/2009.03/qt/src/plugins/sqldrivers/mys
ql'
copy /y "debug\qsqlmysqld4.dll" "c:\Qt\2009.03\qt\plugins\sqldrivers\qsqlmysqld4
.dll"
Скопировано файлов:         1.
mingw32-make[1]: Leaving directory `C:/Qt/2009.03/qt/src/plugins/sqldrivers/mysq
l'
После сборки. и все... и опять

QMYSQL driver not loaded...

ВЫВОД! Кадры из Троллтеха кладут в SDK исходники НЕ ТОЙ версию QT, которая поставляется в бинарном виде! Потому что после пересбора Qt мускульный драйвер видится, и пропадает, без пересборки ODBC.

ЗЫ Я извиняюсь, но это чистой воды МУДАЧЕСТВО. Это за все мои страдания.. казлы млин и уроды... все заработало... Надеюсь, этот пост поможет ещё кому либо из новичков при использовании Qt из SDK, по крайней мере под виндой...
« Последнее редактирование: Сентябрь 16, 2009, 11:34 от hamlo » Записан
Rcus
Гость
« Ответ #10 : Сентябрь 16, 2009, 11:41 »

Хм... интересные выводы. У меня аж один из логических блоков мозга закоротило.
Записан
hamlo
Гость
« Ответ #11 : Сентябрь 16, 2009, 11:52 »

Ну тогда почему мускульные дрова видятся только после пересборки 4.5.2 из исходников?
« Последнее редактирование: Сентябрь 16, 2009, 11:55 от hamlo » Записан
Rcus
Гость
« Ответ #12 : Сентябрь 16, 2009, 12:11 »

Ну обычно в таких случаях принято открыть справку и посмотреть что там написано. Вот хорошая причина может быть
Цитировать
If you experience plugin load problems and see output like this:

 QSqlDatabase: QMYSQL driver not loaded
 QSqlDatabase: available drivers: QMYSQL
The problem is usually that the plugin had the wrong build key. This might require removing an entry from the plugin cache. Here is some more plugin debugging info.
Интересно, там еще по ссылкам много всего.
Записан
hamlo
Гость
« Ответ #13 : Сентябрь 16, 2009, 13:13 »

Омг... а много ещё таких "сюрпризов" может быть? Типа "внутреннего идентификатора сборки"?
Записан
Rcus
Гость
« Ответ #14 : Сентябрь 16, 2009, 13:29 »

Конечно он есть Улыбающийся Не надо страдать параноей - наслаждайтесь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.151 секунд. Запросов: 20.