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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT+MinGW+MySQL  (Прочитано 9489 раз)
igor.alexandrov
Гость
« : Сентябрь 25, 2007, 07:00 »

День добрый Улыбающийся
Есть такая проблема. Имеем следующее ПО: Qt-4.3.1-opensource, MySQL 5.0.21, MinGW. Все это, как понятно, нада заставить работать. Пользовался текстами отсюда http://www.qtforum.org/thread.php?postid=52360#post52360 и отсюда http://ru.wikibooks.org/wiki/Qt4_%D0%A7%D0%90%D0%92%D0%9E#.D0.9A.D0.B0.D0.BA_.D1.81.D0.BE.D0.B1.D1.80.D0.B0.D1.82.D1.8C_.D0.BF.D0.BB.D0.B0.D0.B3.D0.B8.D0.BD_.D0.B4.D0.BB.D1.8F_MySQL.2C_MinGW.3F .
Сначала пробовал прикрепить MySQL к Qt статически, то есть "configure.exe -qt-sql-mysql...". Всё собирается отлично, но при попытке запуска приложения, которое должно юзать MySQL появляется следущее "Точка входа в процедуру mysql_affected_rows@4 не найдена в библиотеке DLL libmysql.dll". Как с этим бороться не понимаю, потому что перепробовал все возможные варианты.... Затем попробовал сделать так, чтобы MySQL являлась плагином к Qt, то есть "configure.exe -plugin-sql-mysql...". Всё опять собралось отлично. Но загрузить драйвер MySQL приложение не может. Ошибка "Cannot load driver". Вот так. Моих мозгов уже не хватает.... Может кто что-нибудь сообразит? Улыбающийся
Записан
alex12
Гость
« Ответ #1 : Сентябрь 25, 2007, 10:21 »

Цитировать
"Cannot load driver".

Это значит плагин не собран или не там лежит. Он должен быть либо в QTDIR/plugins/sqldrivers, либо в папке "sqldrivers" над exe-шником твоей программы.

Я сам использую точно такой же набор ПО: Qt-4.3.1-opensource, MySQL 5.0.21, MinGW.
В качестве GUI использую CodeBlocks. Его только настроить нужно правильно.

Лучший для себя вариант я нашел в статической сброке плагина: он цепляет плагин статически как обычную DLL. Сразу при старте программы понятно нашел он DLL или нет. И никаких "Cannot load driver" и.т.д.

Делается так: в pro файле плагина добавляешь DEFINES += QT_STATICPLUGIN

После этого он собирает qsqlmysql4.dll и ее нужно положить в  QTDIR/bin или потом в папку с релизом твоей программы.

Кстати, чтобы собирать плагины не нужен "configure.exe -plugin-sql-mysql". Нужно просто зайти в QTDIR/src/plugins/sqldrivers/mysql и сделать  qmake и make.

« Последнее редактирование: Сентябрь 25, 2007, 10:25 от alex12 » Записан
igor.alexandrov
Гость
« Ответ #2 : Сентябрь 25, 2007, 17:10 »

так, то есть я могу собирать Qt ваще не упоминая про MySQL, а потом собрать его так, как ты говоришь. Я правильно понял?
Записан
alex12
Гость
« Ответ #3 : Сентябрь 25, 2007, 17:45 »

Да.

Я всегда делаю стандартно "configure.exe -fast -release". После этого собирается только qmake.exe, а все QtCore4.dll и.т.д. идут из стандартной установки. Это значит, что сам Qt не пересобирается.
Записан
igor.alexandrov
Гость
« Ответ #4 : Сентябрь 25, 2007, 21:55 »

Слушай. Чего то у меня нихрена не получается. Можешь точно более или менее написать. Что ты и как делаешь? Заранее благодарен.
Записан
alex12
Гость
« Ответ #5 : Сентябрь 25, 2007, 22:11 »

Что именно ты делаешь и что конкретно не получается?

На каком этапе сбоит и что пишет?
Записан
igor.alexandrov
Гость
« Ответ #6 : Сентябрь 25, 2007, 22:24 »

Вообщем так. Делаю всё так, как ты говоришь. То есть собираю Qt, затем пишу в pro файл MySQL нужную строку. Собираю плагин. И нихрена он его загрузить не может. Плагин лежит в путях. То есть  доступ у qt к нему есть.
« Последнее редактирование: Сентябрь 25, 2007, 22:38 от igor.alexandrov » Записан
alex12
Гость
« Ответ #7 : Сентябрь 26, 2007, 00:07 »

Сорри, совсем забыл. Нужно еще такой макрос где-нибудь около main() в программе поставить:
Код:
Q_IMPORT_PLUGIN( qsqlmysql )
А в .pro файле программы:
Код:
QTPLUGIN     += qsqlmysql 


Это в документации по статическим плагинам написано. Нужно было тебе ее почитать.
« Последнее редактирование: Сентябрь 26, 2007, 00:19 от alex12 » Записан
igor.alexandrov
Гость
« Ответ #8 : Сентябрь 26, 2007, 07:23 »

Ну вот я пришел к тому, с чего начанал. Итак, в .pro файле MySQL присутсвует строка
Код:
CONFIG += static
или так, о которой говорил ты.

В main.cpp есть следущее
Код:
Q_IMPORT_PLUGIN( qsqlmysql )

В .pro файле программы есть
Код:
QTPLUGIN += qsqlmysql

Теперь, после компиляции вылезает та же ошибка, что и при попытке вкомпилировать MySQL в QT статически.
Код:
точка входа в процедуру mysql_affected_rows@4 не найдена в библиотеке DLL libmysql.dll

Теперь я ваще не представляю что можно сделать. Есть только одна мысль - попробовать собрать MySQL из исходников. Он же собран с помощью студии для винды. Отсюда может вылазить несовместимость с gcc.
Записан
Tonal
Гость
« Ответ #9 : Сентябрь 26, 2007, 10:17 »

Натыкался я на это.
Найди в сети утилитку reimp для мингвы. Прогони через неё libmysql.lib - получишь нормальный libmysql.a.
Дальше - пересобирай плагин, или сам Qt сборка сама подхватит правильную либку.
Записан
igor.alexandrov
Гость
« Ответ #10 : Сентябрь 26, 2007, 10:30 »

Народ а какая у вас версия gcc? 3 или 4?
Записан
alex12
Гость
« Ответ #11 : Сентябрь 26, 2007, 11:16 »

MinGW 3.4.2
MySQL 5.0.18-nt

Цитировать
точка входа в процедуру mysql_affected_rows@4 не найдена в библиотеке DLL libmysql.dll

Странно. У меня такого не было.

Я с reimp какие-то манипуляции делал, но что именно не вспомню сейчас...

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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