Название: QT+MinGW+MySQL Отправлено: 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://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 (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". Вот так. Моих мозгов уже не хватает.... Может кто что-нибудь сообразит? :) Название: Re: QT+MinGW+MySQL Отправлено: alex12 от Сентябрь 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. Название: Re: QT+MinGW+MySQL Отправлено: igor.alexandrov от Сентябрь 25, 2007, 17:10 так, то есть я могу собирать Qt ваще не упоминая про MySQL, а потом собрать его так, как ты говоришь. Я правильно понял?
Название: Re: QT+MinGW+MySQL Отправлено: alex12 от Сентябрь 25, 2007, 17:45 Да.
Я всегда делаю стандартно "configure.exe -fast -release". После этого собирается только qmake.exe, а все QtCore4.dll и.т.д. идут из стандартной установки. Это значит, что сам Qt не пересобирается. Название: Re: QT+MinGW+MySQL Отправлено: igor.alexandrov от Сентябрь 25, 2007, 21:55 Слушай. Чего то у меня нихрена не получается. Можешь точно более или менее написать. Что ты и как делаешь? Заранее благодарен.
Название: Re: QT+MinGW+MySQL Отправлено: alex12 от Сентябрь 25, 2007, 22:11 Что именно ты делаешь и что конкретно не получается?
На каком этапе сбоит и что пишет? Название: Re: QT+MinGW+MySQL Отправлено: igor.alexandrov от Сентябрь 25, 2007, 22:24 Вообщем так. Делаю всё так, как ты говоришь. То есть собираю Qt, затем пишу в pro файл MySQL нужную строку. Собираю плагин. И нихрена он его загрузить не может. Плагин лежит в путях. То есть доступ у qt к нему есть.
Название: Re: QT+MinGW+MySQL Отправлено: alex12 от Сентябрь 26, 2007, 00:07 Сорри, совсем забыл. Нужно еще такой макрос где-нибудь около main() в программе поставить:
Код: Q_IMPORT_PLUGIN( qsqlmysql ) Код: QTPLUGIN += qsqlmysql Это в документации по статическим плагинам написано. Нужно было тебе ее почитать. Название: Re: QT+MinGW+MySQL Отправлено: igor.alexandrov от Сентябрь 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. Название: Re: QT+MinGW+MySQL Отправлено: Tonal от Сентябрь 26, 2007, 10:17 Натыкался я на это.
Найди в сети утилитку reimp для мингвы. Прогони через неё libmysql.lib - получишь нормальный libmysql.a. Дальше - пересобирай плагин, или сам Qt сборка сама подхватит правильную либку. Название: Re: QT+MinGW+MySQL Отправлено: igor.alexandrov от Сентябрь 26, 2007, 10:30 Народ а какая у вас версия gcc? 3 или 4?
Название: Re: QT+MinGW+MySQL Отправлено: alex12 от Сентябрь 26, 2007, 11:16 MinGW 3.4.2
MySQL 5.0.18-nt Цитировать точка входа в процедуру mysql_affected_rows@4 не найдена в библиотеке DLL libmysql.dll Странно. У меня такого не было. Я с reimp какие-то манипуляции делал, но что именно не вспомню сейчас... |