MySQL Driver not found (Qt5 MinGW32)
-
@starryeyed What about C:\Qt\Tools\mingw530_32\lib and its subdirectories?
-
@jsulm I've added the "lib" directory to %path% and now windeployqt does not produce any errors, here's it's current output. The list of files it copies still haven't change as far as I see, and it still doesn't include libmysql.dll, though I've tried adding these lines to .pro file
win32: LIBS += -L"$$PWD/../../../../Program Files (x86)/MySQL/MySQL Connector C 6.1/lib/" -llibmysql INCLUDEPATH += "$$PWD/../../../../Program Files (x86)/MySQL/MySQL Connector C 6.1/include" DEPENDPATH += "$$PWD/../../../../Program Files (x86)/MySQL/MySQL Connector C 6.1/include"
-
I'm currently not sure windeployqt tries to find the dependencies of the plugins.
-
@SGaist So probably I shouldn't care much about what windeployqt copies and just add the missing dll myself, but can you give any hints on forcing the application to find it? As I've mentioned, I tried using both ::setLibraryPaths() and qt.conf to add/override the directory where it looks for plugins, no results :(
qt.conf for example normally overrides any paths, but the .exe is still missing the same driver, I don't understand what is missing -
You should have the external dependencies (like OpenSSL etc.) in the same folder as the application in order for your application to find them.
-
@SGaist I already did numerous tests on different machines, now tried it in IE's dev. image, still the same. "Driver not found".
I tried outputting library paths as QMessageBoxes just to see if the path is really correctly set, and it is... Here are [0] and [1] elements of QStringList that libraryPaths() returns after setting them... -
Did you check whether
libmysql.dll
itself has dependencies ? -
@SGaist I can tell you two objective obesrvations, but I really don't know what to get from them.
-
When I realised I also need to build for win32 (I initially didn't plan), instead of configuring MXE I just installed Qt on my Windows system, and copied project as it was. Everything built fine, tho when launching for 1st time I got the same error you can see on screenshot. After a google search I understood that just installing mysql C connector (which was enough in Linux) isn't enough, and copied dll to the bin folder of minGW. Until current failures in deployment I haven't encountered any plugin/driver/library related problems.
-
If I become desperate and install the whole dev environment (qtcreator+mingw+connector's dll) onto target machine, I still can only run the app from qt creator, and the only way to fix that is to copy .exe into bin folder of mingw...
I guess the dll has no dependencies, otherwise I'd have to solve them too for myself. I think it's very important to understand how launch by qt creator differs from regular launch-by-shortcut. I'm sure there's some lowkey qt trickery going on which I miss and therefore fail to "show the way" to app...
-
-
Qt Creator modifies the PATH environment variable to include the Qt version used by the Kit you selected to build your application.
You can check its content in the Run part of the Project panel.
-
@SGaist Thank you for the insight! Now I have a theory. Because the application is used to find needed dlls together with everything else in QTDIR, it expects the same variable to be set on target PC. Or at least, the "Path" to contain the same things as mingw/bin directory contains on my dev machine.
Thing that does not add up in my theory:
When I just moved Linux=>Windows and built for 1st time, it was enough to copy libmysql.dll to mingw/bin path.
Now, if I paste that dll to Windows\System32 on a VM (which is obviously in Path), it still says "Driver not loaded". What am I missing? -
As I wrote before, check the .dlls with Dependency Walker to see if they have any dependencies. You can also run your application with the
QT_DEBUG_PLUGINS
environment variable set to one to gather more information about what is happening. You'll have to do that from the console otherwise you won't see much information. -
@SGaist Unforunately, didn't succeed. Tried Dependency Walker, and it will simply freeze while profiling qt app with plugins, not just mine. I've googled it, look. The dude got the same problem as me with trying to use DW, it just hangs on IMM32.DLL.
I've tried opening the dll itself, here's the list of it's dependencies.
I'm sure that vcruntime140.DLL causes problems, but how do I learn which Microsoft VC++ Redistributable it belongs to? I got all versions installed on dev machine, 2005-2017. Will 2008 one do?I didn't understand how to use that environment variable. I've set it to "1" inside VM as an environment variable (like Path), and launching program didn't change it... Can it really write to system variables? Maybe there's a way to launch it from cmd or with some special software? Here's a shot of cmd launch .
-
AFAIK VSRUNTIME140 belongs to VS2015.
-
This post is deleted!
-
@SGaist Please guide me from a point of supposed fresh install of Windows 10. After installing x86 version of aforementioned Visual C++ 2015 Redistributable,
I tried recreating "run environment" of Qt Creator, by setting the "Path" env. variable in the VM to same contents as in Qt Creator. I don't know if I'm missing any of the env. variables, but I would rather not invest into copying them manually, 1 by 1... Is there any automated tool to set env. variables or I have to come up with my own script? Also, can you please elaborate on QT_DEBUG_PLUGINS? I understood that I'm expected to set it to 1, but where is the output? To this variable, to some log file or? -
I forgot that Windows behaves differently, you have to add
CONFIG += console
to your .pro file to get a console attached to the output of your application.Use windeployqt to get the Qt dependencies of your application, then check with Dependency Walker if something fails. Then you should be good to go.
To test that on your dev machine, rename the Qt folder before starting your application.
-
@SGaist Thank you so much for clarification! I have managed to remove the dll from everywhere in the system except for the MySQL Connector C 6.1 folder in Program Files, which actually contains the dll that I've configured as a required library in .pro file.
Now I'm struggling with a way to prevent database class from initializing before main(), which causes following errors to occur (copied from console output)QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
I highly suspect that it will be enough to get rid of
database *db = new database ();
in the beginning of database.cpp.
I have fixed that and now I deploy successfully.
Infinite thanks for your patience and insights