MYSQL connection on deployment machines not work (Windows)
-
Hello there,
I'm sure this is a really common question but I'm not able to find any solution of my problem.
I build an application with MYSQL plugin, for that I had to build qsqlmysql drivers. I did the job for MacOS and Windows X64, without too much trouble.
Now I deployed my app, on MacOS systems I did not get any trouble, everything is fine, but not on Windows. The connection failed :'(So for Windows, in my application folder I have in the root directory the lib
libmysql.dll
tacking from the mysql installation folder. I also have the foldersqldrivers
with inside the libqsqlmysql.dll
.
Then when I use my release application in my development machine everything fine, If I use my application in a deployment machine, where no mysql installation or qt exist it is not working, error is "Drivers not loaded". I had this message in my development machine before copyinglibmysql.dll
in the root app folder.Any help will be help full.
DEV environment:
- Windows 10 x64
- QT 5.12.6
- MYSQL community server 5.7.28 winx64
- qsqlmysql.dll compiler with nmake
- App compiled with MSVC and cmake
-
Hi,
Start your application with the QT_DEBUG_PLUGINS environment variable set to one. You'll have more information about what is failing with the plugin.
-
Sorry, I was meaning 1 (note that the documentation states a non zero value so what you did should be enough)
Did you try with the deployment of a debug build ?
-
Ok I'm stupid sometimes, I configured cmake as win32 gui application with option set(CMAKE_WIN32_EXECUTABLE ON) then no output in console ^^
So now the debug give me some infowith a bad news....QFactoryLoader::QFactoryLoader() looking at"Y:/Project/build-gynemanager-desktop-client-Desktop_Qt_5_12_6_MSVC2017_64bit-Debug/sqldrivers/qsqlmysqld.dll"Found metadata in lib Y:/Project/build-gynemanager-desktop-client-Desktop_Qt_5_12_6_MSVC2017_64bit-Debug/sqldrivers/qsqlmysqld.dll, metadata={ "IID":"org.qt-project.Qt.QSqlDriverFactoryInterface", "MetaData":{ "Keys":[ "QMYSQL3", "QMYSQL" ] }, "archreq":1, "className":"QMYSQLDriverPlugin", "debug":true, "version":330752 } ... ... ... Impossible de charger la bibliothÞque Y:\Project\build-gynemanager-desktop-client-Desktop_Qt_5_12_6_MSVC2017_64bit-debug\sqldrivers\qsqlmysqld.dllá:Le module spÚcifiÚ est introuvable QLibraryPrivate::loadPlugin failed on"Y:/Project/build-gynemanager-desktop-client-Desktop_Qt_5_12_6_MSVC2017_64bit-Debug/sqldrivers/qsqlmysqld.dll":"Impossible de charger la bibliothÞque Y:\\Project\\build-gynemanager-desktop-client-Desktop_Qt_5_12_6_MSVC2017_64bit-Debug\\sqldrivers\\qsqlmysqld.dllá: Le module spÚcifiÚ est introuvable."QSqlDatabase:QMYSQL driver not loaded
Failed to load the model sqldrivers\qsqlmysqld module not fount oO.
But I look at this folder there is the dll:\build-gynemanager-desktop-client-Desktop_Qt_5_12_6_MSVC2017_64bit-Debug\sqldrivers 26.11.2019 20:55 <DIR> . 26.11.2019 20:55 <DIR> .. 08.11.2019 17:37 1 832 056 qsqlited.dll 26.11.2019 20:29 177 664 qsqlmysqld.dll 08.11.2019 17:37 216 696 qsqlodbcd.dll 08.11.2019 17:37 183 928 qsqlpsqld.dll 4 fichier(s) 2 410 344 octets 2 Rép(s) 22 987 157 504 octets libres
-
Ok I can reproduce this in my development machine by removing libmysql.dll or libmysqld.dll (for debug) in the root app directory.
I get the same error.It seems that the deployment machine not look at root folder for libmysql.dll
-
@Gulivert I guess you did not deploy the MySQL client library? qsqlmysqld.dll is not enough - it depends on MySQL client library.
By the way: it looks like you're deploying debug build.@jsulm yes I also deployed the mysql lib, this one libmysql.dll (or libmysqld.dll for debug deployment). It is why I did not understand what is going one.... It is like this lib is not used in deployed machine. Or may there is another mysql lib necessary ?
-
@jsulm yes I also deployed the mysql lib, this one libmysql.dll (or libmysqld.dll for debug deployment). It is why I did not understand what is going one.... It is like this lib is not used in deployed machine. Or may there is another mysql lib necessary ?
-
OK, thank's to Dependency Walker, libmysql.dll need two dll in c:\Windows\system32 that I do not have in my deployment machine.
- msvcp120.dll
- msvcr120.dll
I copied this two dll from development machine and this is working. Now I need to find which vc%%%%%.exe package I have to install to get this lib in all machines which will get my Application.
Maybe you have some hints to help me.
Thank you all for your proposition!
EDIT : IF I add these two libraries in the application root folder this is also working.
So just have a question, whywindeployqt
do not copy them in my application folder ? Is it a bad configuration in the development machine with environment variables?
I'm noob in Windows development I'm mainly targeting MacOS system usually... -
OK, thank's to Dependency Walker, libmysql.dll need two dll in c:\Windows\system32 that I do not have in my deployment machine.
- msvcp120.dll
- msvcr120.dll
I copied this two dll from development machine and this is working. Now I need to find which vc%%%%%.exe package I have to install to get this lib in all machines which will get my Application.
Maybe you have some hints to help me.
Thank you all for your proposition!
EDIT : IF I add these two libraries in the application root folder this is also working.
So just have a question, whywindeployqt
do not copy them in my application folder ? Is it a bad configuration in the development machine with environment variables?
I'm noob in Windows development I'm mainly targeting MacOS system usually... -
Thank you for your reply.
Yes I thought the same as you and try to install the last vcredis C++ from my Visutal Studio installation but without any success. It give me msvcp140.dll.
Anyway, currently I do not have time to investigate my Windows development machine configuration, there is clearly a problem between QT Creator environment variable used to compile my app and my manual settings when I compile DLL from my terminal. I will investigate that the next year, right now I missed enough time with this trouble of mysql dll to get it work and I have to code to finish the next release of my app which have to be released on December...To fix this problem temporary I copied de missing dll by hand and add them in the MSI package installer to be deployed to the target customer machines in the app root folder. It's not the best solution but it works.