Solved Cannot mix incompatible Qt library
-
@Tamfub said in Cannot mix incompatible Qt library:
How do I rebuild the DLLs?
See https://doc.qt.io/qt-5/sql-driver.html#how-to-build-the-qmysql-plugin-on-windows
Should I remove them from my Qt 5.15 folder
Yes, remove everything that you copied. They are incompatible with Qt 5.15.1, as mentioned in your original error message.
add those in the 5.12.3 folder via the "Add libraries..." tool?
No, you cannot add DLLs from Qt 5.12.3 into your Qt 5.15.1 project.
-
@JKSH
I've read what's written here. This is my MySql conf folder:
The files- ./include/mysql.h
- ./bin/libmysql.dll
- /bin/libmysql.lib
are present.
As indicated in the link, I opened a terminal in Windows, in
C:\Qt\5.15.1\Src\qtbase
and typed
qmake -- MYSQL_INCDIR="C:\Program Files (x86)\MySQL\MySQL Server 5.5\include" MYSQL_LIBDIR="C:\Program Files (x86)\MySQL\MySQL Server 5.5\lib"
But I got this:
Instead, this worked:
C:/Qt/5.15.1/mingw81_64/lib
is the value of my PATH env variable, and Qt Creator is running in the background. What am I missing/getting wrong? -
@Tamfub said in Cannot mix incompatible Qt library:
I've read what's written here.
...
The files
- ./include/mysql.h
- ./bin/libmysql.dll
- /bin/libmysql.lib
are present.
...
As indicated in the link, I opened a terminal in Windows, in
C:\Qt\5.15.1\Src\qtbase
and typedqmake -- MYSQL_INCDIR="C:\Program Files (x86)\MySQL\MySQL Server 5.5\include" MYSQL_LIBDIR="C:\Program Files (x86)\MySQL\MySQL Server 5.5\lib"
These are all very good. You are on the right track.
EDIT: You are in the wrong folder. You should be in
qtbase\src\plugins\sqldrivers\
, not inqtbase\
.What am I missing/getting wrong?
Have a closer look at the error message. It says, "ERROR: Cannot run compiler 'g++'.... Maybe you forgot to setup the environment?"
That means your compiler,
g++.exe
, is not found in your terminal's environment.Instead, this worked:
C:/Qt/5.15.1/mingw81_64/lib
is the value of my PATH env variable,This shows that you have successfully added the Qt 5.15.1 DLLs and executables (like
qmake.exe
) to your environment.You must also add your compiler to your environment. When you do that, you should also get a valid output when you type
g++ --version
into your terminal.You can install the MinGW x64 compiler from the Qt online installer. The default folder is
C:\Qt\Tools\mingw810_64\bin
.Qt Creator is running in the background.
Qt Creator has no effect on your terminal's environment. You can close Qt Creator.
-
@JKSH
Hi, I've managed to make my qmake command run
It asked me which edition I would like to use. After that, I got:
If I runmingw32-make
, will it install Qt from scratch and delete my Qt folder? Instead, if I runnmake sub-mysql
, it says that nmake is not recognized. I tried to replace nmake with mingw32-make, but it says
-
Please follow the documentation (and start over with a clean source dir):
C:\Qt5\5.13.2\Src\qtbase\src\plugins\sqldrivers>qmake -version -
@Christian-Ehrlicher is right: You are in the wrong folder. You should be in
qtbase\src\plugins\sqldrivers
You should also clean out your source folders before trying again. (Delete all files that were generated by qmake)
@Tamfub said in Cannot mix incompatible Qt library:
Instead, if I run
nmake sub-mysql
, it says that nmake is not recognized.nmake is for MSVC, not MinGW.
-
@JKSH Ok, got it. Sorry for the silly question, but how do I clean out the source folders? From the terminal with a specific command in a specific folder? From Qt Creator (like this)?
Also, I moved toqtbase\src\plugins\sqldrivers
and re-typed (w/out cleaning)qmake -- MYSQL_INCDIR="C:\Program Files (x86)\MySQL\MySQL Server 5.5\include" MYSQL_LIBDIR="C:\Program Files (x86)\MySQL\MySQL Server 5.5\lib"
, but the usage for qmake appeared in the output. -
@Tamfub said in Cannot mix incompatible Qt library:
how do I clean out the source folders? From the terminal with a specific command in a specific folder? From Qt Creator (like this)?
It depends on how you got your source code.
If you extracted it from a Zip file, the easiest thing to do is delete the source folders and extract it again.
You can't use Qt Creator for this.
the usage for qmake appeared in the output.
It probably means you made a mistake while typing. Check again carefully after you clean your source folder.
I just noticed something else: It looks like you are using 64-bit Qt and 64-bit MinGW. Therefore, you must also use the 64-bit MySQL C connector. (Your screenshots show that you've installed 32-bit MySQL)
-
@JKSH I made it work now, I have mistaken qtbase\src\plugins with qtbase\plugins. Back to my project now. My .pro file contains:
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/lib/ -llibmysql else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/lib/ -llibmysqld INCLUDEPATH += $$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/include DEPENDPATH += $$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/include
That is:
The kit is:
When I run my project from Qt Creator, it works! I would like to deploy my app, so I go to
[build folder]/release
, clean its content (except the executable), open a terminal and type
windeployqt.exe .
I launch the .exe, but the SQL-related part does not work... This is the output of the windeployqt command:
C:\Qt\Projects\tutorial\progettoMalnati\sharedtexteditor\build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release\release\progettoMalnati_srv_2.exe 64 bit, release executable Adding Qt5Svg for qsvgicon.dll Direct dependencies: Qt5Core Qt5Gui Qt5Network Qt5Sql Qt5Widgets All dependencies : Qt5Core Qt5Gui Qt5Network Qt5Sql Qt5Widgets To be deployed : Qt5Core Qt5Gui Qt5Network Qt5Sql Qt5Svg Qt5Widgets Updating Qt5Core.dll. Updating Qt5Gui.dll. Updating Qt5Network.dll. Updating Qt5Sql.dll. Updating Qt5Svg.dll. Updating Qt5Widgets.dll. Updating libGLESv2.dll. Updating libEGL.dll. Updating D3Dcompiler_47.dll. Updating opengl32sw.dll. Updating libgcc_s_seh-1.dll. Updating libstdc++-6.dll. Updating libwinpthread-1.dll. Creating directory C:/Qt/Projects/tutorial/progettoMalnati/sharedtexteditor/build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release/release/bearer. Updating qgenericbearer.dll. Creating directory C:/Qt/Projects/tutorial/progettoMalnati/sharedtexteditor/build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release/release/iconengines. Updating qsvgicon.dll. Creating directory C:/Qt/Projects/tutorial/progettoMalnati/sharedtexteditor/build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release/release/imageformats. Updating qgif.dll. Updating qicns.dll. Updating qico.dll. Updating qjpeg.dll. Updating qsvg.dll. Updating qtga.dll. Updating qtiff.dll. Updating qwbmp.dll. Updating qwebp.dll. Creating directory C:/Qt/Projects/tutorial/progettoMalnati/sharedtexteditor/build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release/release/platforms. Updating qwindows.dll. Creating directory C:/Qt/Projects/tutorial/progettoMalnati/sharedtexteditor/build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release/release/sqldrivers. Updating qsqlite.dll. Updating qsqlmysql.dll. Updating qsqlodbc.dll. Creating directory C:/Qt/Projects/tutorial/progettoMalnati/sharedtexteditor/build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release/release/styles. Updating qwindowsvistastyle.dll. Creating C:\Qt\Projects\tutorial\progettoMalnati\sharedtexteditor\build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release\release\translations... Creating qt_ar.qm... Creating qt_bg.qm... Creating qt_ca.qm... Creating qt_cs.qm... Creating qt_da.qm... Creating qt_de.qm... Creating qt_en.qm... Creating qt_es.qm... Creating qt_fi.qm... Creating qt_fr.qm... Creating qt_gd.qm... Creating qt_he.qm... Creating qt_hu.qm... Creating qt_it.qm... Creating qt_ja.qm... Creating qt_ko.qm... Creating qt_lv.qm... Creating qt_pl.qm... Creating qt_ru.qm... Creating qt_sk.qm... Creating qt_tr.qm... Creating qt_uk.qm... Creating qt_zh_TW.qm...
-
@Tamfub said in Cannot mix incompatible Qt library:
Updating qsqlmysql.dll.
As you can see the plugin is copied, you have to make sure that the dependencies are also available (search the forum, use Dependency Walker)
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/lib/ -llibmysql else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/lib/ -llibmysqld INCLUDEPATH += $$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/include DEPENDPATH += $$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/include
What do you think do gain with this? It's not needed at all.
-
@Christian-Ehrlicher said in Cannot mix incompatible Qt library:
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/lib/ -llibmysql
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/lib/ -llibmysqldINCLUDEPATH += $$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/include
DEPENDPATH += $$PWD/../../../../../5.15.1/mingw81_64/plugins/sqldrivers/mysql-connector-c-6.1.11-winx64/includeWhat do you think do gain with this? It's not needed at all.
If I don't include this, I get this while running my program in Qt:
QFactoryLoader::QFactoryLoader() checking directory path "C:/Qt/5.15.1/mingw81_64/plugins/sqldrivers" ... QFactoryLoader::QFactoryLoader() looking at "C:/Qt/5.15.1/mingw81_64/plugins/sqldrivers/qsqlite.dll" Found metadata in lib C:/Qt/5.15.1/mingw81_64/plugins/sqldrivers/qsqlite.dll, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInterface", "MetaData": { "Keys": [ "QSQLITE" ] }, "archreq": 0, "className": "QSQLiteDriverPlugin", "debug": false, "version": 331520 } Got keys from plugin meta data ("QSQLITE") QFactoryLoader::QFactoryLoader() looking at "C:/Qt/5.15.1/mingw81_64/plugins/sqldrivers/qsqlmysql.dll" Found metadata in lib C:/Qt/5.15.1/mingw81_64/plugins/sqldrivers/qsqlmysql.dll, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInterface", "MetaData": { "Keys": [ "QMYSQL3", "QMYSQL", "QMARIADB" ] }, "archreq": 0, "className": "QMYSQLDriverPlugin", "debug": false, "version": 331520 } Got keys from plugin meta data ("QMYSQL3", "QMYSQL", "QMARIADB") QFactoryLoader::QFactoryLoader() looking at "C:/Qt/5.15.1/mingw81_64/plugins/sqldrivers/qsqlodbc.dll" Found metadata in lib C:/Qt/5.15.1/mingw81_64/plugins/sqldrivers/qsqlodbc.dll, metadata= { "IID": "org.qt-project.Qt.QSqlDriverFactoryInterface", "MetaData": { "Keys": [ "QODBC3", "QODBC" ] }, "archreq": 0, "className": "QODBCDriverPlugin", "debug": false, "version": 331520 } Got keys from plugin meta data ("QODBC3", "QODBC") QFactoryLoader::QFactoryLoader() checking directory path "C:/Qt/Projects/tutorial/progettoMalnati/sharedtexteditor/build-progettoMalnati_srv_2-Desktop_Qt_5_15_1_MinGW_64_bit-Release/release/sqldrivers" ... Cannot load library C:\Qt\5.15.1\mingw81_64\plugins\sqldrivers\qsqlmysql.dll: Impossibile trovare il modulo specificato. QLibraryPrivate::loadPlugin failed on "C:/Qt/5.15.1/mingw81_64/plugins/sqldrivers/qsqlmysql.dll" : "Cannot load library C:\\Qt\\5.15.1\\mingw81_64\\plugins\\sqldrivers\\qsqlmysql.dll: Impossibile trovare il modulo specificato." QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMARIADB QMYSQL QMYSQL3 QODBC QODBC3 Errore nel collegamento al DB "Driver not loaded Driver not loaded"
i.e. it cannot load the MYSQL driver. Also, Dependency Walker is taking ages to analyze my .exe. They say it is a normal behaviour, but 5 minutes is too much I guess.
-
@Tamfub said in Cannot mix incompatible Qt library:
If I don't include this, I get this while running my program in Qt:
You're aware that some compiler options and loading a plugin has nothing to do with each other? It's not needed. The only thing you need is (as I already told you) that the program finds the dependencies for your plugin, for instance the mysql dll (search the forum)
-
@Christian-Ehrlicher
After a long time I managed to analyze the .exe on Dependency Walker, and I got this in the log window:LoadLibraryW("C:\qt\projects\tutorial\progettomalnati\sharedtexteditor\build-progettomalnati_srv_2-desktop_qt_5_15_1_mingw_64_bit-release\release\sqldrivers\qsqlmysql.dll") called from "QT5CORE.DLL" at address 0x0000000068A61823. Loaded "QSQLMYSQL.DLL" at address 0x000000006C5C0000. Successfully hooked module. Unloaded "QSQLMYSQL.DLL" at address 0x000000006C5C0000. LoadLibraryW("C:\qt\projects\tutorial\progettomalnati\sharedtexteditor\build-progettomalnati_srv_2-desktop_qt_5_15_1_mingw_64_bit-release\release\sqldrivers\qsqlmysql.dll") returned NULL. Error: Impossibile trovare il modulo specificato (126). QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMARIADB QMYSQL QMYSQL3 QODBC QODBC3 Errore nel collegamento al DB "Driver not loaded Driver not loaded"
But this file is in the folder!
-
@Tamfub said in Cannot mix incompatible Qt library:
But this file is in the folder!
I know, but you don't read what I tell you (already two times) - the plugins has some dependencies to other libraries which must be available... !
-
@Christian-Ehrlicher I actually read what you wrote. But I don't get which libraries must be available, then. Maybe I'm missing a LIBS directive in the .pro file?
-
@Christian-Ehrlicher said in Cannot mix incompatible Qt library:
. The only thing you need is (as I already told you) that the program finds the dependencies for your plugin, for instance the mysql dll (search the forum)
...
-
Hi.
@JKSH said in Cannot mix incompatible Qt library:
I just noticed something else: It looks like you are using 64-bit Qt and 64-bit MinGW. Therefore, you must also use the 64-bit MySQL C connector. (Your screenshots show that you've installed 32-bit MySQL)
I missed this passage. At the moment, I have two choices:
Install 32-bit MySQL - I visited this page but there's no 64-bit version.
Use 32-bit Qt and 32-bit MinGW (both are already installed on my PC) - Qt version can be changed from the "Manage kits" tool, but how do I change the qmake version?
-
@Tamfub said in Cannot mix incompatible Qt library:
@JKSH said in Cannot mix incompatible Qt library:
I just noticed something else: It looks like you are using 64-bit Qt and 64-bit MinGW. Therefore, you must also use the 64-bit MySQL C connector. (Your screenshots show that you've installed 32-bit MySQL)
I missed this passage.
That's OK.
mysql-connector-c-6.1.11-winx64
is 64-bit.After a long time I managed to analyze the .exe on Dependency Walker
Ask Dependency Walker to open
qsqlmysql.dll
instead of your .exe. -
Ask Dependency Walker to open
qsqlmysql.dll
instead of your .exe.It seems there are a bunch problems...
What now?
-
@Tamfub said in Cannot mix incompatible Qt library:
It seems there are a bunch problems...
Ignore API-MS-WIN-*.dll and EXT-MS-WIN-.dll. Those are not real problems.
However,
libmysql.dll
is a real problem. If it is missing, your program cannot loadqsqlmysql.dll
.This is what @Christian-Ehrlicher meant by "dependency":
qsqlmysql.dll
depends onlibmysql.dll
. You must deploy all of your dependencies.