MySql "driver not loaded" trotz existierender dlls

Alles rund um die Programmierung mit Qt
binio
Beiträge: 23
Registriert: 8. März 2010 19:11
Kontaktdaten:

MySql "driver not loaded" trotz existierender dlls

Beitrag von binio »

Hallo,

habe leider ein Problem beim einbinden von meinen vorher kompilierten dlls.
Wenn ich meine funktionierenden:
  • libqsqlmysql4.a
    qsqlmysql4.dll
    libqsqlmysqld4.a
    qsqlmysqld4.dll
im Installationspfad "C:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers" lasse/kopiere kann ich mit den MySql drivern starten bzw. es gibt kein Fehler.
Wenn ich jedoch alle notwendigen dlls nach "C:\dlls" kopiere und dann die kompilierte Exe ausführe gibt es ein Problem mit diesen MySql drivern. Er bindet Sie einfach nicht ein.
Ich habe mal ein Screenshot beigefügt der alle Dateien anzeigt (inkl. QApplication::libraryPaths()). Auch gibt es ein Problem wenn ich alle nötigen dlls im gleichen Pfad der Exe habe. Er guckt für die Plugins immer nur unter "C:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers". Ich habe schon folgendes Versucht:
  • Pfad "c:\dlls" in die Windows PATH geschrieben.
    Die software.pro mit verschiedenen Ergänzungen versehen. Es waren so viele Youtube und Co Anleitungen wie ich versucht habe, dass ich es nicht mehr weiss was ich da versucht habe.
Jetzt nach 1 Woche herumexperimentieren und Probieren weiss ich nicht mehr weiter. Kann mir jemand bitte sagen wie ich diesen Pfad "C:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers" auf "c:\dlls" ändern kann ?
Bisher habe ich den "c:\dlls" immer mit

Code: Alles auswählen

QApplication::addLibraryPath("C:\dlls")
eingebunden.

Ich danke jedem im Voraus für die Tipps und Anregungen !!!!
Dateianhänge
2015-05-18 19_13_43-Greenshot.png
2015-05-18 19_13_43-Greenshot.png (192.61 KiB) 11535 mal betrachtet
Technik muss dem Menschen dienen, nicht umgekehrt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von Christian81 »

Zum einen braucht qmysql.dll auch noch die abhängigen MySQL - Libraries sonst kann Windows die Dll nicht laden -> Dependency Walker
Zum anderen - warum sollen Qt-Plugins nach C:\Dlls ? Wenn man es macht wie beschrieben, nämlich die einzelnen Plugin-Verzeichnisse parallel zum Executable, dann muss man auch nicht mit QApplication::addLibraryPath() rumspielen. Siehe http://doc.qt.io/qt-5/deployment-plugin ... -directory
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
binio
Beiträge: 23
Registriert: 8. März 2010 19:11
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von binio »

Wau so schnell geantwortet. Danke erstmal dafür !
qmysql.dll auch noch die abhängigen MySQL - Libraries
sind doch auch im dem Pfad "c:\dlls", libmysql.lib oder nicht ?
Habe den Dependency Walker mal meine Exe ausführen lassen. Siehe Anhang "Dependency Walker log".
Ich kann dem log nicht viel an Problemen entnehmen :(
Ich möchte die Qt-Plugins nach "c:\dlls" legen damit ich einfach die exe + dlls auf jedem PC im Netzwerk kopieren und nutzen kann.
Habe jetzt mal folgendes versucht:

Code: Alles auswählen

QCoreApplication::addLibraryPath("c:\dlls");
QCoreApplication::setLibraryPaths(QStringList("c:\dlls"));
qDebug()<<"QLibraryInfo::location(QLibraryInfo::PluginsPath)"<<QLibraryInfo::location(QLibraryInfo::PluginsPath);
Das Ergebnis ist leider:

Code: Alles auswählen

QLibraryInfo::location(QLibraryInfo::PluginsPath) "C:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins" 
Ich verstehe das nicht. Wieso nimmt er nicht meinen Pfad an ?!
nämlich die einzelnen Plugin-Verzeichnisse parallel zum Executable
verstehe ich nicht ganz. Ich habe jetzt mal den Ordner "plugins" inkl. Unterordner und zusätzlich den Ordner "sqldrivers" inkl. Dateien in das Verzeichnis von der Exe gelegt. Leider kann er immer noch nicht die Mysql Treiber laden.
Mache ich da noch irgendwo ein Denkfehler ?
Technik muss dem Menschen dienen, nicht umgekehrt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von Christian81 »

Dependency Walker sollst Du auf das Plugin ausführen, nicht auf das Executable denn das Plugin kann ja nicht geladen werden, oder?
Und Mysql.lib ist eine statische (Import) Library, keine Runtime-Library - die wird Dir nichts helfen.
Bzgl. Der dlls habe ich ja schon gesagt wie man sie korrekt verteilt:
Wenn man es macht wie beschrieben, nämlich die einzelnen Plugin-Verzeichnisse parallel zum Executable, dann muss man auch nicht mit QApplication::addLibraryPath() rumspielen. Siehe http://doc.qt.io/qt-5/deployment-plugin ... -directory
Und was er aus 'C:\irgendwas' macht sind C++ Grundlagen. '\' ist das Exscape-Zeichen ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von MichaelS »

binio hat geschrieben: verstehe ich nicht ganz. Ich habe jetzt mal den Ordner "plugins" inkl. Unterordner und zusätzlich den Ordner "sqldrivers" inkl. Dateien in das Verzeichnis von der Exe gelegt.
Das ist falsch. Lege im Verzeichnis, in dem sich Deine exe befindet, den Ordner sqldrivers und da kopierst Du die Datei qsqlmysql.dll rein ( also ohne den plugins-Ordner). Die Datei libmysql.dll gehört nicht in den sqldrivers-Ordner, sondern muss im gleichen Ordner wie Deine exe liegen.

Gruß Michael
binio
Beiträge: 23
Registriert: 8. März 2010 19:11
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von binio »

Dependency Walker sollst Du auf das Plugin ausführen, nicht auf das Executable denn das Plugin kann ja nicht geladen werden, oder?
Habe es auf die "qsqlmysql4.dll" angewendet und ein 11 MB Log erhalten :(
Das ist ein teil davon:

Code: Alles auswählen

********************************| Search Order |********************************
*                                                                              *
* Legend: F  File                     E  Error (path not valid)                *
*                                                                              *
********************************************************************************

Side-by-Side components (Windows 2000/XP/2003/Vista/+)
   [F ] c:\windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18201_none_ec80f00e8593ece5\COMCTL32.DLL
   [F ] c:\windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.18807_none_41e554362bd82458\COMCTL32.DLL
   [F ] c:\windows\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.18834_none_72d38c5186679d48\GDIPLUS.DLL
The system's "KnownDLLs" list
   [F ] c:\windows\system32\ADVAPI32.DLL
   [F ] c:\windows\system32\API-MS-WIN-DOWNLEVEL-ADVAPI32-L1-1-0.DLL
   [F ] c:\windows\system32\API-MS-WIN-DOWNLEVEL-NORMALIZ-L1-1-0.DLL
   [F ] c:\windows\system32\API-MS-WIN-DOWNLEVEL-OLE32-L1-1-0.DLL
   [F ] c:\windows\system32\API-MS-WIN-DOWNLEVEL-SHLWAPI-L1-1-0.DLL
   [F ] c:\windows\system32\API-MS-WIN-DOWNLEVEL-USER32-L1-1-0.DLL
   [F ] c:\windows\system32\API-MS-WIN-DOWNLEVEL-VERSION-L1-1-0.DLL
   [F ] c:\windows\system32\CFGMGR32.DLL
   [F ] c:\windows\system32\CLBCATQ.DLL
   [F ] c:\windows\system32\COMCTL32.DLL
   [F ] c:\windows\system32\COMDLG32.DLL
   [F ] c:\windows\system32\CRYPT32.DLL
   [F ] c:\windows\system32\DEVOBJ.DLL
   [F ] c:\windows\system32\DIFXAPI.DLL
   [F ] c:\windows\system32\GDI32.DLL
   [F ] c:\windows\system32\IERTUTIL.DLL
   [F ] c:\windows\system32\IMAGEHLP.DLL
   [F ] c:\windows\system32\IMM32.DLL
   [F ] c:\windows\system32\KERNEL32.DLL
   [F ] c:\windows\system32\KERNELBASE.DLL
   [F ] c:\windows\system32\LPK.DLL
   [F ] c:\windows\system32\MSASN1.DLL
   [F ] c:\windows\system32\MSCTF.DLL
   [F ] c:\windows\system32\MSVCRT.DLL
   [F ] c:\windows\system32\NORMALIZ.DLL
   [F ] c:\windows\system32\NSI.DLL
   [F ] c:\windows\system32\NTDLL.DLL
   [F ] c:\windows\system32\OLE32.DLL
   [F ] c:\windows\system32\OLEAUT32.DLL
   [F ] c:\windows\system32\PROFAPI.DLL
   [F ] c:\windows\system32\PSAPI.DLL
   [F ] c:\windows\system32\RPCRT4.DLL
   [F ] c:\windows\system32\SECHOST.DLL
   [F ] c:\windows\system32\SETUPAPI.DLL
   [F ] c:\windows\system32\SHELL32.DLL
   [F ] c:\windows\system32\SHLWAPI.DLL
   [F ] c:\windows\system32\URLMON.DLL
   [F ] c:\windows\system32\USER32.DLL
   [F ] c:\windows\system32\USERENV.DLL
   [F ] c:\windows\system32\USP10.DLL
   [F ] c:\windows\system32\WININET.DLL
   [F ] c:\windows\system32\WINTRUST.DLL
   [F ] c:\windows\system32\WLDAP32.DLL
   [F ] c:\windows\system32\WS2_32.DLL
   [F ] c:\windows\syswow64\NTDLL.DLL
The application directory
   [  ] C:\dlls\
The 32-bit system directory
   [  ] C:\Windows\system32\
The 16-bit system directory (Windows NT/2000/XP/2003/Vista/+)
   [  ] C:\Windows\system\
The system's root OS directory
   [  ] C:\Windows\
The application's registered "App Paths" directories
The system's "PATH" environment variable directories
   [  ] C:\ProgramData\Oracle\Java\javapath\
   [  ] C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common\
   [  ] C:\Windows\system32\
   [  ] C:\Windows\
   [  ] C:\Windows\System32\Wbem\
   [  ] C:\Windows\System32\WindowsPowerShell\v1.0\
   [  ] C:\Program Files\Intel\WiFi\bin\
   [  ] C:\Program Files\Common Files\Intel\WirelessCommon\
   [  ] C:\Program Files (x86)\EgisTec BioExcess\x64\
   [  ] C:\Program Files (x86)\EgisTec BioExcess\
   [  ] C:\MinGW\bin\
   [  ] C:\Qt\bin\
   [  ] C:\MySQL\MySQL51\lib\opt\
   [  ] c:\dlls\
   [  ] C:\Program Files\Intel\WiFi\bin\
   [  ] C:\Program Files\Common Files\Intel\WirelessCommon\
Ich erkenne auch hier kein Fehler. Bin aber nicht der Experte mit dem Tool :(
Und Mysql.lib ist eine statische (Import) Library, keine Runtime-Library - die wird Dir nichts helfen.
Ok die Datei "libmysql.lib" hilf mir nichts :) Ich meine auch gelesen zu haben das ich nur die "qsqlmysql4.dll" und "libqsqlmysql4.a" brauche. Ist das korrekt ?
Und was er aus 'C:\irgendwas' macht sind C++ Grundlagen. '\' ist das Exscape-Zeichen
Habe nun auch folgendes versucht "c:\\dlls", "c:\dlls", "c://dlls" und "c:/dlls" ich meine auch wenn ich den Pfad in "" schreibe das das Exscape-Zeichen keine Wirkung darauf hat. Oder liege ich da falsch ?
Das ist falsch. Lege im Verzeichnis, in dem sich Deine exe befindet, den Ordner sqldrivers und da kopierst Du die Datei qsqlmysql.dll rein ( also ohne den plugins-Ordner). Die Datei libmysql.dll gehört nicht in den sqldrivers-Ordner, sondern muss im gleichen Ordner wie Deine exe liegen.
Habe ich gemacht, jedoch ohne erfolg :( Siehe Cloud Angabe da mein Kontingent für Dateianhänge vollständig ausgenutzt ist :(

Cloud Angaben:

Code: Alles auswählen

https://cloud.binnio.de/index.php/s/drFJZ8qcor0hKRZ
Technik muss dem Menschen dienen, nicht umgekehrt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von Christian81 »

Ich habe doch nun exakt angegeben wohin das Plugin muss und was machst Du? Du legst qmysql.dll direkt parallel zum Execuable anstatt wie geschrieben und im Link die Plugin-Verzeichnisse zu nehmen!

Code: Alles auswählen

exe
 - sqldrivers
    qmysql.dll
When the application is run, Qt will first treat the application's executable directory as the base directory for searching for plugins. For example if the application is in C:\Program Files\MyApp and has a style plugin, Qt will look in C:\Program Files\MyApp\styles
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
binio
Beiträge: 23
Registriert: 8. März 2010 19:11
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von binio »

Entschuldige bitte. Ich habe Dich vorhin wohl falsch verstanden.
Habe nun alles wie Du gesagt hast kopiert. Jedoch funktioniert es immer noch nicht.
Habe mal ein Screenshot in die Cloud geladen "2015-05-19 23_56_05-Greenshot.png".

Clouddaten:

Code: Alles auswählen

https://cloud.binnio.de/index.php/s/drFJZ8qcor0hKRZ
Woran kann es noch liegen ?
Technik muss dem Menschen dienen, nicht umgekehrt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von Christian81 »

Es liegt immer noch daran, dass das qmysql - Plugin z.B. libmySQL.dll nicht finden kann da es nicht dort liegt wo das Plugin ist. Deshalb ja Dependency Walker ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
binio
Beiträge: 23
Registriert: 8. März 2010 19:11
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von binio »

Es liegt immer noch daran, dass das qmysql - Plugin z.B. libmySQL.dll nicht finden kann da es nicht dort liegt wo das Plugin ist. Deshalb ja Dependency Walker ...
OK, ich habe mal den "Dependency Walker" auf folgende Dateien angewendet und das Ergebnis gespeichert.
  • libmysql.dll
    qmysql.dll
    qsqlmysql4.dll
Ich habe jetzt nichts außergewöhnliches an Pfaden gefunden bei "Dependency Walker". Ich habe aber auch hier die Dateien in die Cloud geladen.
Kannst Du dir die Dateien bitte angucken , ob Du was siehst ?
Technik muss dem Menschen dienen, nicht umgekehrt
binio
Beiträge: 23
Registriert: 8. März 2010 19:11
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von binio »

Hat jemand noch eine Springende Idee ?
Komme leider nicht weiter :(
Technik muss dem Menschen dienen, nicht umgekehrt
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von veeman »

app.exe
sqldrivers\libmysql.dll
sqldrivers\qmysql.dll
sqldrivers\qsqlmysql4.dll
sqldrivers\whateverneedsbysql.dll
... ggf solltest du die Logs des Dependecy Walkers verstehen lernen.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von MichaelS »

veeman hat geschrieben:
sqldrivers\libmysql.dll
Die gehört da nicht hin. Ich habe es gerade noch einmal getestet. Wenn ich die libmysql.dll in das sqldrivers-Verzeichnis verschiebe, wird das Plugin nicht mehr geladen.
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von veeman »

MichaelS du hast recht. Da macht der TE wohl was grundlegend Falsch, ggf. werden einfach verschiedene Versionen von DLLs gemischt....

Das sind die minimalen DLLs die ich brauche (Release):

Code: Alles auswählen

QSQLDriversView.exe
icudt53.dll
icuin53.dll
icuuc53.dll
libmysql.dll
Qt5Core.dll
Qt5Sql.dll
sqldrivers\qsqlmysql.dll
binio
Beiträge: 23
Registriert: 8. März 2010 19:11
Kontaktdaten:

Re: MySql "driver not loaded" trotz existierender dlls

Beitrag von binio »

Also ich habe jetzt folgendes Szenario:
C:\dlls

Code: Alles auswählen

Ordner:
sqldrivers
Dateien:
crm.exe
libgcc_s_dw2-1.dll
libmysql.dll
mingwm10.dll
qsqlite4.dll
qsqlited4.dll
qsqlodbc4.dll
qsqlodbcd4.dll
QtCore4.dll
QtGui4.dll
QtNetwork4.dll
QtSql4.dll
C:\dlls\sqldrivers

Code: Alles auswählen

Dateien:
libqsqlmysql4.a
libqsqlmysqld4.a
qmysql.dll
qsqlite4.dll
qsqlited4.dll
qsqlmysql4.dll
qsqlmysqld4.dll
qsqlodbc4.dll
qsqlodbcd4.dll
Und ich glaube es nicht aber die Exe ist ausführbar und die MYSQL Driver werden geladen. Ich habe aber aktuell Windows 8.1 drauf ohne "QT Suite". Ich werde es heute mal auf meinem Windows 7 Prof 64bit testen und euch berichten.
Technik muss dem Menschen dienen, nicht umgekehrt
Antworten