Название: Сборка драйвера MySQL в QT 5.11 Отправлено: 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 (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 (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? Если собирали то подскажите в чем может быть ошибка, перерыл весь интернет, ни один из приведённых способов не помогает решить проблему. Название: Re: Сборка драйвера MySQL в QT 5.11 Отправлено: qate от Июнь 21, 2018, 16:07 > Но при конфигурировании проверка MySql не проходит "MySql .. no" и в конце появляется сообщение об ошибке "ERROR: Feature 'sql-mysql' was enabled, but the pre-condition 'libs.mysql' failed."
в теле сообщений от configure будет написано что он пытался сделать для теста сборки mysql - смотри его там, наверно не находит h файлы Название: Re: Сборка драйвера MySQL в QT 5.11 Отправлено: vovan1982 от Июнь 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 Но честно говоря я так и не понял, что ему не нравится. Гугление по этим ошибкам результата тоже не дало. Название: Re: Сборка драйвера MySQL в QT 5.11 Отправлено: qate от Июнь 22, 2018, 08:59 линкер не находит mysql_get_client_version в либе mysql
пробуй вручную собрать тест D:\Qt\5.11\config.tests\mysql как написано в логе, думай что не так а чем "штатный" драйвер из состава qt-opensource-windows-x86-5.11.1.exe не устроил ? Название: Re: Сборка драйвера MySQL в QT 5.11 Отправлено: vovan1982 от Июнь 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 в папку проекта всё заработало. Тему можно закрывать. |