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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сборка драйвера MySQL в QT 5.11  (Прочитано 9447 раз)
vovan1982
Гость
« : Июнь 21, 2018, 13:30 »

Всем привет.
Тема конечно избитая, но ни как не получается собрать этот драйвер, перерыл множество информации включая этот форум.

Изначально собрал qt 5.11 из исходников с ключами
-shared -debug-and-release -platform win32-g++ -prefix D:\Qt\5.11\5.11-x64 -opensource -confirm-license -c++std c++14 -nomake examples -skip wayland -skip purchasing -skip serialbus -skip qtserialport -skip script -skip scxml -skip speech -skip location -opengl desktop -qt-zlib -qt-pcre -qt-libpng -qt-freetype -openssl-linked -I D:\Qt\openssl-1.0.2\dist\include -L D:\Qt\openssl-1.0.2\dist\lib OPENSSL_LIBS="-llibssl -llibcrypto -luser32 -lgdi32 -lwsock32 -lws2_32"

Собирал на Windows 10 Pro x64. Для сборки использовал mingw-w64, так же установил всё необходимое для сборки.

Скачал и установил "MySQL Connector C 6.1", установил его в каталог C:\MySql. (сначала установил версию х64, но потом после того как с ней ничего не получилось переустановил на x86 и проделал все действия с ней)

Затем как написано в официальной документации http://doc.qt.io/qt-5/sql-driver.html#qmysql перешел в каталог "%QTDIR%\qtbase\src\plugins\sqldrivers" и выполнил там
"qmake -- MYSQL_INCDIR=C:/MySQL/include "MYSQL_LIBDIR=C:/MYSQL/lib" "
mingw32-make sub-mysql

но получил ошибку
"mingw32-make: *** No rule to make target 'sub-mysql'.  Stop."

посмотрел Makefile, цели sub-mysql там действительно нет, если же выполнять просто mingw32-make то проходит сборка OBDC и SqlLite, Mysql не собирается.

После этого перерыл кучу инфы и наткнулся на этот ресурс https://mike-mvk.livejournal.com/4196.html в котором говорят что необходимо сначала libmysql.dll перевести в libmysql.a
выполнил преобразование и повторил всё заново, ошибка таже.
Затем попробовал сделать так как написано на указанном ресурсе
cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\lib\libmysql.a" mysql.pro

но опять получил ошибку
Project ERROR: Library 'mysql' is not defined.

После чего решил собрать QT уже с поддержкой MySql, взял чистые исходники и попробовал сконфигурировать с параметрами
-shared -debug-and-release -platform win32-g++ -prefix D:\Qt\5.11\5.11-x64 -opensource -confirm-license -c++std c++14 -nomake examples -skip wayland -skip purchasing -skip serialbus -skip qtserialport -skip script -skip scxml -skip speech -skip location -opengl desktop -qt-zlib -qt-pcre -qt-libpng -no-libjpeg -qt-freetype -openssl-linked -I D:\Qt\openssl-1.0.2\dist\include -L D:\Qt\openssl-1.0.2\dist\lib OPENSSL_LIBS="-llibssl -llibcrypto -luser32 -lgdi32 -lwsock32 -lws2_32" -sql-mysql MYSQL_INCDIR=C:\MySQL\include MYSQL_LIBDIR=C:\MySQL\lib MYSQL_LIBS=-lmysqld

Но при конфигурировании проверка MySql не проходит "MySql .. no" и в конце появляется сообщение об ошибке "ERROR: Feature 'sql-mysql' was enabled, but the pre-condition 'libs.mysql' failed."

После решил скачать qt-opensource-windows-x86-5.11.1.exe и попробовать собрать x86 версию драйвера, потому как где то прочитал что она будет работать и с х64, но получил всё те же ошибки

Кто нибудь удачно собирал драйвер MySql для Qt 5.11 или 5.10?
Если собирали то подскажите в чем может быть ошибка, перерыл весь интернет, ни один из приведённых способов не помогает решить проблему.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Июнь 21, 2018, 16:07 »

> Но при конфигурировании проверка MySql не проходит "MySql .. no" и в конце появляется сообщение об ошибке "ERROR: Feature 'sql-mysql' was enabled, but the pre-condition 'libs.mysql' failed."

в теле сообщений от configure будет написано что он пытался сделать для теста сборки mysql - смотри его там, наверно не находит h файлы
Записан
vovan1982
Гость
« Ответ #2 : Июнь 21, 2018, 16:31 »

Если смотреть в config.log то по поводу mysql там есть это

looking for library mysql
Trying source 0 (type mysqlConfig) of library mysql ...
mysql_config not found.
  => source produced no result.
Trying source 1 (type mysqlConfig) of library mysql ...
mysql_config not found.
  => source produced no result.
Trying source 2 (type mysqlConfig) of library mysql ...
mysql_config not found.
  => source produced no result.
Trying source 3 (type mysqlConfig) of library mysql ...
mysql_config not found.
  => source produced no result.
Trying source 4 (type inline) of library mysql ...
  => source failed condition '!config.win32'.
Trying source 5 (type inline) of library mysql ...
+ cd /d D:\Qt\5.11\config.tests\mysql && D:\Qt\5.11\qtbase\bin\qmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_LIBDIR += D:\\Qt\\openssl-1.0.2\\dist\\lib" "INCLUDEPATH += D:\\Qt\\openssl-1.0.2\\dist\\include" "LIBS += -LC:\\MySQL\\lib -lmysql" "INCLUDEPATH *= C:\\MySQL\\include" D:/Qt/5.11.1/config.tests/mysql
+ cd /d D:\Qt\5.11\config.tests\mysql && set MAKEFLAGS=& mingw32-make clean && set MAKEFLAGS=& mingw32-make
> del main.o
> g++ -c -fno-keep-inline-dllexport -g -w -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -I. -ID:\Qt\openssl-1.0.2\dist\include -IC:\MySQL\include -ID:\Qt\5.11.1\qtbase\mkspecs\win32-g++  -o main.o main.cpp
> g++ -Wl,-subsystem,console -mthreads -o mysql.exe main.o  -LD:\Qt\openssl-1.0.2\dist\lib -LC:\MySQL\lib -lmysql
> main.o: In function `main':
> D:\Qt\5.11.1\config.tests\mysql/main.cpp:10: undefined reference to `mysql_get_client_version'
> collect2.exe: error: ld returned 1 exit status
> mingw32-make: *** [Makefile:64: mysql.exe] Error 1
 => source failed verification.
Trying source 6 (type inline) of library mysql ...
  => source failed condition '!config.win32'.
test config.qtbase_sqldrivers.libraries.mysql FAILED

Но честно говоря я так и не понял, что ему не нравится. Гугление по этим ошибкам результата тоже не дало.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Июнь 22, 2018, 08:59 »

линкер не находит mysql_get_client_version в либе mysql

пробуй вручную собрать тест D:\Qt\5.11\config.tests\mysql как написано в логе, думай что не так

а чем "штатный" драйвер из состава qt-opensource-windows-x86-5.11.1.exe не устроил ?
Записан
vovan1982
Гость
« Ответ #4 : Июнь 22, 2018, 16:01 »

Проблему решил.

qate большое вам спасибо за наводящие вопросы и подсказки, как говорится правильно заданный вопрос подразумевает ответ.

Далее опишу в чем была у меня проблема.

Честно говоря про "штатный драйвер" для mysql не знал. Везде где читал было написано что его необходимо собирать. Взяв штатный драйвер попробовал использовать его с собранным мной QT, но получил Driver not loded. В принципе ожидаемо т.к. драйвер собран для x86, а я собрал QT для x64, но где то писали что должно работать или я не правильно понял. Затем попробовал подключится к mysql используя стандартный набор QT, mingw и штатный драйвер, подключение прошло успешно, что в принципе тоже ожидаемо.

Но то что драйвер для х86 отказался работать с моей сборкой и учитывая сообщение
линкер не находит mysql_get_client_version в либе mysql

явно наталкивает на мысль что проблема скорей всего в библиотеке mysql которую я подсовываю своей собранной qt.

И тут я вспомнил что в начале когда я пытался собрать драйвер с "MySQL Connector C 6.1 x64" я не выполнял преобразование libmysql.dll в libmysql.a.
Удалив "MySQL Connector C 6.1 x86" я поставил "MySQL Connector C 6.1 x64" преобразовал libmysql.dll в libmysql.a и запустил конфигурирование чистых исходников с ключами:

-shared -debug-and-release -platform win32-g++ -prefix D:\Qt\5.11.1\5.11.1-x64 -opensource -confirm-license -c++std c++14 -nomake examples -skip wayland -skip purchasing -skip serialbus -skip qtserialport -skip script -skip scxml -skip speech -skip location -opengl desktop -qt-zlib -qt-pcre -qt-libpng -no-libjpeg -qt-freetype -openssl-linked -I D:\Qt\openssl-1.0.2\dist\include -L D:\Qt\openssl-1.0.2\dist\lib OPENSSL_LIBS="-llibssl -llibcrypto -luser32 -lgdi32 -lwsock32 -lws2_32" -sql-mysql MYSQL_INCDIR=C:\MySQL64\include MYSQL_LIBDIR=C:\MySQL64\lib MYSQL_LIBS="-lmysql"

в результате проверка MySql при конфигурировании прошла успешно "MySql .. yes" и после сборки появились драйвера для mysql. Положив драйвера в папку Qt Creator и файл libmysql.dll в папку проекта всё заработало.

Тему можно закрывать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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