Название: QT4 + MySQL Отправлено: Godfather от Июль 12, 2007, 18:43 Всем привет!
Скажите плизз, что я делаю не так :?: имеется Qt 4.3.0 commerical, MySQL 5.1, Visual Studio 2005 SP1 дистрибутив пропатчил, для VS проинсталлировал хотфикс сначала запустил: configure -qt-sql-mysql -plugin-sql-mysql -debug-and-release -platform win32-msvc2005 -static (и ещё много чего -no-) компилирую дрова и плагины: C:\Qt\4.3.0\src\sql\>nmake всё хорошо C:\Qt\4.3.0\bin\QtSql4.dll C:\Qt\4.3.0\plugins\sqldrivers\>nmake всё хорошо в C:\Qt\4.3.0\plugins\sqldrivers\qsqlmysql4.dll , qsqlmysql4.lib пробую: Код: QSqlDatabase dbCon = QSqlDatabase::addDatabase("QMYSQL"); пробую добавить Код: #include <QtPlugin> Цитировать Error 1 error LNK2019: unresolved external symbol "class QObject * __cdecl qt_plugin_instance_QSQLMYSQL(void)" (?qt_plugin_instance_QSQLMYSQL@@YAPAVQObject@@XZ) referenced in function "public: __thiscall StaticQSQLMYSQLPluginInstance::StaticQSQLMYSQLPluginInstance(void)" (??0StaticQSQLMYSQLPluginInstance@@QAE@XZ) DA_MySQL.obj что делать :?: :!: :?:умоляю помогите! Название: Re: QT4 + MySQL Отправлено: pastor от Июль 12, 2007, 18:46 Цитировать ошибка: Driver not loaded Driver not loaded Этот вопрос на форуме подмимался тысячи раз. Юзаем поиск Название: QT4 + MySQL Отправлено: Hellraiser от Июль 12, 2007, 19:11 Статическая Qt не работает с плагинами. Пересобери с ключом -shared
Название: QT4 + MySQL Отправлено: Godfather от Июль 12, 2007, 19:43 Hellraiser, спасибо!
это вероятно решит проблему плагина а почему дрова не робят?( или я не понимаю связи между ними Название: QT4 + MySQL Отправлено: Hellraiser от Июль 12, 2007, 20:27 Цитата: "Godfather" а почему дрова не робят?( или я не понимаю связи между ними Плагин не грузится, соответственно, не грузится драйвер (Qt даже и не подозревает о наличии такого :wink: ). Если уж так хочется собрать статическую Qt, то и все расширения (SQL, Imageformats и прочее) надо тоже собирать статически (ключи -qt-sql-mysql а не -plugin-sql-mysql) Название: QT4 + MySQL Отправлено: Racheengel от Июль 12, 2007, 22:22 Да, только придется пересобирать под каждую версию сервера SQL индивидуально.
Название: QT4 + MySQL Отправлено: Godfather от Июль 12, 2007, 23:07 а где почитать про различия плагина и драйвера?
я нигде на тролтеке не нашел толкового описания и вообще запутался, честно говоря плагин - это динамически подгужаемый драйвер? а сам по себе драйвер отдельно - статический? -qt-sql-mysql -- это драйвер -plugin-sql-mysql -- это плагин я конфигурировал qt с обоими ключами одноврменно ибо я нигде не видел упоминания, что параметр плагин надо собирать с -shared, а параметр для драйверов - со -static эти 2 параметра вообще можно указывать одновременно? мне вообще пофиг как на самом деле главное - что бы работало и на клиентской машине тоже Название: QT4 + MySQL Отправлено: pastor от Июль 13, 2007, 00:16 Цитата: "Godfather" а где почитать про различия плагина и драйвера? я нигде на тролтеке не нашел толкового описания и вообще запутался, честно говоря Цитировать -qt-sql-<driver> Enable a SQL <driver> in the Qt Library. -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to at run time. Available values for <driver>: mysql psql oci odbc tds db2 sqlite sqlite2 ibase Помоему все понятно с приведенного описания Название: QT4 + MySQL Отправлено: Godfather от Июль 13, 2007, 11:07 т.е. драйвер встраивается в QtSql(d)4.dll
либо хранится в qsqlmysql.dll и подключается динамически? Название: QT4 + MySQL Отправлено: pastor от Июль 13, 2007, 11:34 Совершенно верно
Название: QT4 + MySQL Отправлено: Godfather от Июль 13, 2007, 15:05 спасибо за разъяснение! буду дальше копать :)
добавлено спустя 1 час 4 минуты: подскажите, пожалуйста, как теперь подключаить плагин? скомпилился успешно Код: #include <QtPlugin> Цитировать Error 1 error LNK2019: unresolved external symbol "class QObject * __cdecl qt_plugin_instance_QSQLMYSQL(void)" (?qt_plugin_instance_QSQLMYSQL@@YAPAVQObject@@XZ) referenced in function "public: __thiscall StaticQSQLMYSQLPluginInstance::StaticQSQLMYSQLPluginInstance(void)" (??0StaticQSQLMYSQLPluginInstance@@QAE@XZ) DA_MySQL.obj добавлено спустя 1 час 16 минут: а после сборки со статическими драйверами (с nmake) такие выдаются ошибки: Цитировать Error 1 error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) DA_MySQL.obj втф ?? :?: :?:Error 2 error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) frmMain.obj Error 3 error LNK2019: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) referenced in function __ehhandler$?createDaDbStruct@IDataAdapter@@QAE?AUDaDbStruct@@VQString@@PAV3@@Z IDataAdapter.obj Error 4 error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) ResponseConstructor.obj Error 5 error LNK2001: unresolved external symbol "public: static char * QSqlDatabase::defaultConnection" (?defaultConnection@QSqlDatabase@@2PADA) DA_MySQL.obj Error 6 error LNK2001: unresolved external symbol "private: static class QTextCodec * QString::codecForCStrings" (?codecForCStrings@QString@@0PAVQTextCodec@@A) DA_MySQL.obj Error 7 error LNK2001: unresolved external symbol "public: static struct QVectorData QVectorData::shared_null" (?shared_null@QVectorData@@2U1@A) DA_MySQL.obj Error 8 error LNK2019: unresolved external symbol "public: static struct QVectorData QVectorData::shared_null" (?shared_null@QVectorData@@2U1@A) referenced in function "public: __thiscall QString::QString(class QString const &)" (??0QString@@QAE@ABV0@@Z) frmMain.obj Error 9 error LNK2001: unresolved external symbol "public: static struct QVectorData QVectorData::shared_null" (?shared_null@QVectorData@@2U1@A) IDataAdapter.obj Error 10 error LNK2001: unresolved external symbol "public: static struct QMetaObject const QMainWindow::staticMetaObject" (?staticMetaObject@QMainWindow@@2UQMetaObject@@B) moc_frmMain1.obj Error 11 error LNK2001: unresolved external symbol "public: static enum QSysInfo::WinVersion const QSysInfo::WindowsVersion" (?WindowsVersion@QSysInfo@@2W4WinVersion@1@B) qtmaind.lib Error 12 error LNK2001: unresolved external symbol "private: static struct QByteArray::Data QByteArray::shared_null" (?shared_null@QByteArray@@0UData@1@A) qtmaind.lib Название: QT4 + MySQL Отправлено: pastor от Июль 13, 2007, 15:23 Цитата: "Godfather" подскажите, пожалуйста, как теперь подключаить плагин? скомпилился успешно Как ты собрал? Статически? Название: QT4 + MySQL Отправлено: Godfather от Июль 13, 2007, 15:31 как я понял плагины надо собирать shared
а дрова static правильно? Название: QT4 + MySQL Отправлено: pastor от Июль 13, 2007, 15:45 Брррр
Есть два понятия plugin и in the Qt Library. Если первый вариант - то у тебя каждый драйвер к БД будет размещаться в отдельной библиотеке (DLL), если второй вариант - все драйвера БД встрояться в бибилотеку Qt. Драйвер - это прослойка, между Qt и библиотекой для БД. Короче коворя plugin и in the Qt Library это способы размещения драйвера к БД - external или internal соответсвенно. Ничего более. Название: QT4 + MySQL Отправлено: Hellraiser от Июль 13, 2007, 15:47 переконфигурируй QT
configure -shared -debug-and-release -rtti -stl -plugin-sql-mysql Название: QT4 + MySQL Отправлено: Godfather от Июль 13, 2007, 15:51 если конфигурировать -plugin-sql-<driver> то это external-размещение
если -qt-sql-<driver> - то internal соответственно я называю это плагин и дарйвер вот если настраивать как shared plugin, то ошибка одна если как static driver, то сразу много спасибо Hellraiser сейчас попробую я настраивал так же только -no-rtti и -no-stl не стоило так делать? Название: QT4 + MySQL Отправлено: pastor от Июль 13, 2007, 16:01 Цитата: "Godfather" соответственно я называю это плагин и дарйвер Блин, это совершенно разные вещи и ненадо их смещивать. Плугин это плугин. Драйвер это драйвер. Грудо говоря это просто вспособ хранения драйвера: внутри или вне библиотеки. Цитата: "Godfather" я настраивал так же только -no-rtti и -no-stl не стоило так делать? Этим ты отключаешь rtti и stl. rtti имхо нафиг не нужен. stl - как кому. У себя я не юзаю этот функционал Название: QT4 + MySQL Отправлено: Godfather от Июль 13, 2007, 16:53 я не знаю что такое rtti и stl
поэтому их использую, поэтому и отключил вроде бы это на функционирование плагинов не должно влиять вопрос остается открытым - как заставить работать плагин прочитал что надо ещё #include <QSqlDriverPlugin> сейчас докомпилю -static -qt-sql-mysql и если опять не заработает, то попробую -shared -plugin-sql-mysql и использованием дополнительного иклуда а ешё я на qtcentre.org прочёл: "You need static plugins to make it work that way." это как?? как я понял плагины надо конфигурировать как шейрд добавлено спустя 46 минут: я буду плакать!! ((( драйвера сбилдились плагины тоже драйвер QSQLMYSQL виден в \demo\sqlbrowser\ приложения не компиляться, рагаютются на Unresolved externs ыыыыыыы Название: QT4 + MySQL Отправлено: pastor от Июль 13, 2007, 17:19 Приведи код!
Название: QT4 + MySQL Отправлено: Godfather от Июль 13, 2007, 17:45 ничего не понимаю (с) брать пилоты
Output: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC при том что \demo\sqlbrowser\ видит драйвер QMYSQL и соединяется с базой! что я делаю не так? а код самый обычный, ничего выдающегося, из примеров практически Название: QT4 + MySQL Отправлено: -=s0L=- от Июль 13, 2007, 18:07 Цитата: "Godfather" я не знаю что такое rtti и stl ну чтож, похвально.. похвально..., у меня такое чувство, что ты еще не до конца оценил силу с++ :) Название: QT4 + MySQL Отправлено: pastor от Июль 13, 2007, 19:03 Цитата: "Godfather" а код самый обычный, ничего выдающегося, из примеров практически http://prog.org.ru/forum/topic_2141.html ЗЫ: Поюзай поиск по форуму Название: QT4 + MySQL Отправлено: Godfather от Июль 13, 2007, 19:40 спасибо!
в той теме кстати интересная фраза: "P.S. В Qt 4.1 плагины можно слинковать статически и проблема отпадает сама собой" Название: QT4 + MySQL Отправлено: Godfather от Июль 16, 2007, 13:30 заработало!
всем большое спасибо!! вот моё решение: %QTDIR%\> configure -shared -qt-sql-mysql -platform win32-msvc2005 %QTDIR%\src\sql> qmake -o Makefile sql.pro "INCLUDEPATH+=c:\mysql\include" "LIBS+=c:\mysql\lib\opt\libmysql.lib" %QTDIR%\src\sql> nmake и никаких дополнительных библиотек в корне приложения, итп Название: QT4 + MySQL Отправлено: crossly от Июль 16, 2007, 23:01 человек..... драйвер и плагин это разные вещи ...:)... во первых: при сборке qt будь уверен сто qt йе знает пути к либам и заголовкам.... если све гуд, то по пробуй удалить ветку реестра \HKLM\Software\Trolltech и где то там false :)
Название: QT4 + MySQL Отправлено: Godfather от Июль 16, 2007, 23:17 конечно я знаю различия между драйвером как плагином и драйвером, встроенным в в общую библиотеку
ага и кэш плагинов я удалял в моём случае вся тонкость в понимании разницы между shared и static преставлением правда я ещё не понял в чём, в процессе понимания а либы и заголовки тут не при чём это очень простая ошибка лечится либо configure -I "путь к заголовкам" -L "путь к либам" (кстати в 4.3.0 -L глючит) либо qmake "INCLUDEPATH+=путь к заголовкам" "LIBS+=путь к либам" в папке с драйвером/плагином Название: QT4 + MySQL Отправлено: Racheengel от Июль 17, 2007, 19:25 вообще RTTI - Run Time Type Info - лучше включить.
А так кто-нибуть его затребует, вот приложение и свалится... Название: QT4 + MySQL Отправлено: pastor от Июль 17, 2007, 19:51 имхо, про RTTI лучше помнить, но выключать ;) В большенстве случаеях он не нужен. У себя в проектах ниразу не юзал, ибо надобности в нём невижу. Функционала Qt, имхо пердостаточно.
Название: QT4 + MySQL Отправлено: Racheengel от Июль 17, 2007, 20:33 Когда начинаешь юзать сторонние либы, приходится о нем вспоминать, когда приложение начнет валиться...
Название: QT4 + MySQL Отправлено: crossly от Июль 18, 2007, 20:20 друг.... при сборке static lib... qt предупреждает что использовать плагины ты не сможешь...... растолкуй подробно что тебе нужно....
Название: QT4 + MySQL Отправлено: pastor от Июль 18, 2007, 20:33 Цитата: "crossly" друг.... при сборке static lib... qt предупреждает что использовать плагины ты не сможешь...... растолкуй подробно что тебе нужно.... А де такое написано? Не встречал. Объясни зачем тогда нужен нам Q_IMPORT_PLUGIN? |