Сборка драйвера MySQL в QT 5.11



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

    Изначально собрал 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?
    Если собирали то подскажите в чем может быть ошибка, перерыл весь интернет, ни один из приведённых способов не помогает решить проблему.



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

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

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

    Но то что драйвер для х86 отказался работать с моей сборкой и учитывая ошибку в логаг

    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

    явно наталкивает на мысль что проблема скорей всего в библиотеке 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 в папку проекта всё заработало.

    Тему можно закрывать.



  • Добрый день Владимир, а она работает под Android ? не знаете?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.