Programm nicht lauffähig unter anderen Rechnern

Alles rund um die Programmierung mit Qt
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Nur um sicher zu gehen:
Du hast uns oben eine FLACHE Ordnerstruktur gezeigt, alle DLLS (so schreibst du) liegen direkt im gleichen Verzeichnis wie die exe.
Ich weise dich darauf hin, dass du, wenn du das Programm weitergeben willst, ein "plugins"-Unterverzeichnis erstellen musst, in das du dann alle plugins mitlieferst, die du brauchst. Du antwortest "Wie beschrieben, das habe ich getan", was nach dem vorhergehenden Post eben NICHT stimmt.
Nun schreibst du "und alle dort befindlichen *.dlls sind mit hinzugefügt." - wie nun? Alle einfach rüberkopiert, oder die komplette Ordnerstruktur mit übernommen?

Wie gesagt, die Ordnerstruktur ist WICHTIG, sonst wird nichst gefunden auf fremden Rechnern.
Und wie Christian schon sagte, der DependencWalker hilft unter Windows, fehlende DLLs zu identifizieren.

Und wegen dem Code, den du als Ursache identifiziert hast:
In dem Code wird dnamisch das qsqlmysql-Plugin geladen. Wenn das nicht gefunden wird, ist klar, dass du mit Weglassen der Zeile dem Fehler aus dem Weg gehst - lösen kannst du ihn so nicht :P
yarikata
Beiträge: 22
Registriert: 17. Mai 2011 16:40

Beitrag von yarikata »

Christian81 hat geschrieben:
yarikata hat geschrieben: und alle dort befindlichen *.dlls sind mit hinzugefügt.
Was heißt das? Sicher nicht so wie es in der Doku steht... :roll:
Abgesehen davon fehlt dann wohl noch die mysql-dll -> Foren-Suche 'Dependency Walker'
Das heißt: Alle dlls (mit SQLDRIVERS-ORDNER) sind in dem plugins - ordner kopiert wurden!
franzf hat geschrieben: Nur um sicher zu gehen:
Du hast uns oben eine FLACHE Ordnerstruktur gezeigt, alle DLLS (so schreibst du) liegen direkt im gleichen Verzeichnis wie die exe.
Ich weise dich darauf hin, dass du, wenn du das Programm weitergeben willst, ein "plugins"-Unterverzeichnis erstellen musst, in das du dann alle plugins mitlieferst, die du brauchst. Du antwortest "Wie beschrieben, das habe ich getan", was nach dem vorhergehenden Post eben NICHT stimmt.
Nun schreibst du "und alle dort befindlichen *.dlls sind mit hinzugefügt." - wie nun? Alle einfach rüberkopiert, oder die komplette Ordnerstruktur mit übernommen?

Wie gesagt, die Ordnerstruktur ist WICHTIG, sonst wird nichst gefunden auf fremden Rechnern.
Und wie Christian schon sagte, der DependencWalker hilft unter Windows, fehlende DLLs zu identifizieren.

Und wegen dem Code, den du als Ursache identifiziert hast:
In dem Code wird dnamisch das qsqlmysql-Plugin geladen. Wenn das nicht gefunden wird, ist klar, dass du mit Weglassen der Zeile dem Fehler aus dem Weg gehst - lösen kannst du ihn so nicht Razz
Damit ihr beide nun zufrieden seid, habe ich euch extra ein paar screens erstellt, damit ihr sehen könnt, das in dem ordner ein plugins-ordner ist und in diesem der sqldrivers-ordner. Und hier befinden sich auch die besagten Treiber.

Ich werde gleich die Forensuche nutzen, um das Programm zu suchen und es auszuprobieren.
Ergebnis folgt später.


Edit:
Programm ausprobiert. Es fehlten laut dem Programm: gpsvc.dll und ieshims.dll. Nach dem Einfügen von gpsvc.dll fehlte nun sysntfy.dll.
Alle drei Dateien liegen dort, wo auch die exe zu finden ist.

Die einzigen zwei Fehlermeldungen sind:
Error: Modules with different CPU types were found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Und Fehler tauchen hier auf:

GPSVC.DLL
SYSNTFY.DLL
CPU: AMD64

Jedoch bleibt der Fehler immernoch bestehen.
Da ich es auf meinen erstellen Notebook ausprobiert habe.
matane
Dateianhänge
dllbild.png
dllbild.png (113.48 KiB) 4656 mal betrachtet
pluginbild.png
pluginbild.png (131.39 KiB) 4656 mal betrachtet
sqldriversbild.png
sqldriversbild.png (90.52 KiB) 4656 mal betrachtet
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

yarikata hat geschrieben:
Christian81 hat geschrieben:
yarikata hat geschrieben: und alle dort befindlichen *.dlls sind mit hinzugefügt.
Was heißt das? Sicher nicht so wie es in der Doku steht... :roll:
Abgesehen davon fehlt dann wohl noch die mysql-dll -> Foren-Suche 'Dependency Walker'
Das heißt: Alle dlls (mit SQLDRIVERS-ORDNER) sind in dem plugins - ordner kopiert wurden!
Manche Leute scheinen echt eine Leseschwäche zu haben oder sind zu faul meine Links auch zu lesen...
Qt-Doku hat geschrieben: When the application is run, Qt will first treat the application's executable directory as the pluginsbase. 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
yarikata
Beiträge: 22
Registriert: 17. Mai 2011 16:40

Beitrag von yarikata »

Christian81 hat geschrieben:
yarikata hat geschrieben:
Christian81 hat geschrieben:
yarikata hat geschrieben: und alle dort befindlichen *.dlls sind mit hinzugefügt.
Was heißt das? Sicher nicht so wie es in der Doku steht... :roll:
Abgesehen davon fehlt dann wohl noch die mysql-dll -> Foren-Suche 'Dependency Walker'
Das heißt: Alle dlls (mit SQLDRIVERS-ORDNER) sind in dem plugins - ordner kopiert wurden!
Manche Leute scheinen echt eine Leseschwäche zu haben oder sind zu faul meine Links auch zu lesen...
Qt-Doku hat geschrieben: When the application is run, Qt will first treat the application's executable directory as the pluginsbase. 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.
Der Qoute hilft mir sehr wenig. Könnte man das auch verständlicher ausdrücken?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

yarikata hat geschrieben:Der Qoute hilft mir sehr wenig. Könnte man das auch verständlicher ausdrücken?
Er will dir sagen, dass ich wohl Mist erzählt hab. sry.
Du sollst diese Verzeichnisstruktur anlegen:

Code: Alles auswählen

AppBaseDir/
+- app.exe
+- sqldrivers/
    +- qsqlmysql.dll (oder wie das Ding jetzt unter Windows heißt)
+- imageformats/
    +- qjpeg.dll
// usw
Zu meiner Verteidigung:
Ich habe kein Windows und komme nie in Versuchung ein Programm so zu bundlen, dass es unabhängig von einer Qt-Installation läuft.
Ich hab hier einfach die googleearth-Installation angeschaut, und da wurden die ganzen plugin-Verzeichnisse neben die App in einen "plugins"-Ordner verfrachtet.
Aber jetzt bin ich (hoffentlich) schlauer!
yarikata
Beiträge: 22
Registriert: 17. Mai 2011 16:40

Beitrag von yarikata »

franzf hat geschrieben:
yarikata hat geschrieben:Der Qoute hilft mir sehr wenig. Könnte man das auch verständlicher ausdrücken?
Er will dir sagen, dass ich wohl Mist erzählt hab. sry.
Du sollst diese Verzeichnisstruktur anlegen:

Code: Alles auswählen

AppBaseDir/
+- app.exe
+- sqldrivers/
    +- qsqlmysql.dll (oder wie das Ding jetzt unter Windows heißt)
+- imageformats/
    +- qjpeg.dll
// usw
Zu meiner Verteidigung:
Ich habe kein Windows und komme nie in Versuchung ein Programm so zu bundlen, dass es unabhängig von einer Qt-Installation läuft.
Ich hab hier einfach die googleearth-Installation angeschaut, und da wurden die ganzen plugin-Verzeichnisse neben die App in einen "plugins"-Ordner verfrachtet.
Aber jetzt bin ich (hoffentlich) schlauer!
Ich habe nun die Ordner-Struktur so angelegt.
Es werden nun auch die Icons angezeigt. Soweit sogut. Eine Verbindung kann ich dennoch nicht aufbauen, da die qsqlmysql4 meiner Vermutung nach eine ältere Version ist, als die anderen im sqldrivers-Ordner.
Nur wo bekomme ich diese dll her, die die Verson 4.6.3 trägt?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

yarikata hat geschrieben:meiner Vermutung nach eine ältere Version ist, als die anderen im sqldrivers-Ordner.
Nur wo bekomme ich diese dll her, die die Verson 4.6.3 trägt?
Wie kommst du auf diese Einschätzung? Ich meine nur: entweder hat man Qt selbst kompiliert und kennt daher seine Datenbanktreiber (die ja ebenfalls mitkompiliert wurden) oder man nimmt eben eine fertige Binary-Distribution der Trolls.. aber in keinem Fall liegen da unterschiedliche Versionen im gleichen Ordner rum..

Nur noch zwei Punkte (sofern ich hier noch nicht den Überblick verloren habe...):

1. QtModul vs. Treiber (aka "Plugin") vs. mysql-Interface
Es wurde zwar schon erwähnt, aber sicherheitshalber nochmals: Für eine Datenbank-Anbindung brauchst du drei Dinge:
- Das Qt-Modul (qsql4.dll)
- Das Qt-Plugin (der "Qt-Wrapper" um das konkrete Datenbank-Interface)
- Das konkrete Datenbank-Interface. Je nach Treiber und Build ist das statisch oder dynamisch gegen das Qt-Plugin gelinkt. Im Fall von MySQL ist das also je nach Build noch eine weitere DLL.

also z.B.

Code: Alles auswählen

AppBaseDir/
+- app.exe
+- andere DLLs (z.B. qsql4.dll)
+- sqldrivers/
    +- qsqlmysql.dll
+- libmysql.dll       (wird von qsqlmysql.dll benötigt)
Wenn in dieser Konfiguration "libmysql.dll" fehlt, existiert zwar der Treiber, aber der Kann nicht geladen werden, weil die MySQL-DLL fehlt.

Soweit so gut.. zum zweiten Punkt:
Ich arbeite mit Win 7, 64bit Ultimate.
Die Testrechner sind Win XP, 32 bit Professional, SP 3
.....
Error: Modules with different CPU types were found.
Vermischelst du da was?
yarikata
Beiträge: 22
Registriert: 17. Mai 2011 16:40

Beitrag von yarikata »

solarix hat geschrieben:
yarikata hat geschrieben:meiner Vermutung nach eine ältere Version ist, als die anderen im sqldrivers-Ordner.
Nur wo bekomme ich diese dll her, die die Verson 4.6.3 trägt?
Wie kommst du auf diese Einschätzung? Ich meine nur: entweder hat man Qt selbst kompiliert und kennt daher seine Datenbanktreiber (die ja ebenfalls mitkompiliert wurden) oder man nimmt eben eine fertige Binary-Distribution der Trolls.. aber in keinem Fall liegen da unterschiedliche Versionen im gleichen Ordner rum..

Nur noch zwei Punkte (sofern ich hier noch nicht den Überblick verloren habe...):

1. QtModul vs. Treiber (aka "Plugin") vs. mysql-Interface
Es wurde zwar schon erwähnt, aber sicherheitshalber nochmals: Für eine Datenbank-Anbindung brauchst du drei Dinge:
- Das Qt-Modul (qsql4.dll)
- Das Qt-Plugin (der "Qt-Wrapper" um das konkrete Datenbank-Interface)
- Das konkrete Datenbank-Interface. Je nach Treiber und Build ist das statisch oder dynamisch gegen das Qt-Plugin gelinkt. Im Fall von MySQL ist das also je nach Build noch eine weitere DLL.

also z.B.

Code: Alles auswählen

AppBaseDir/
+- app.exe
+- andere DLLs (z.B. qsql4.dll)
+- sqldrivers/
    +- qsqlmysql.dll
+- libmysql.dll       (wird von qsqlmysql.dll benötigt)
Wenn in dieser Konfiguration "libmysql.dll" fehlt, existiert zwar der Treiber, aber der Kann nicht geladen werden, weil die MySQL-DLL fehlt.

Soweit so gut.. zum zweiten Punkt:
Ich arbeite mit Win 7, 64bit Ultimate.
Die Testrechner sind Win XP, 32 bit Professional, SP 3
.....
Error: Modules with different CPU types were found.
Vermischelst du da was?
Im jetzigen moment würde es mir zu lange dauern, Qt neu zukompilieren. Der Grund liegt darin, das ich kurz vor dem Abschluss eines Projektes stehe.
Nun, ich habe mir die Dateiversionsnummern auch angesehen, alle (im sqldrivers-ordner) haben die Version 4.6.3 bis auf die oben genannte.

Die erstere dll ist vorhanden. Die anderen zwei Punkte sagen mir recht wenig. Sorry.

Ich habe nun die libmysql.dll zu der exe mit hinzugefügt. Ergebnis ist das selbe. Keine Verbindung.

Zu zweitens:
Nein. Bei einen Kollegen funktioniert das einwandfrei. Er arbeitet auch mit Win 7, 64 bit und sein Programm läuft auch auf 32bit Rechnern von XP bis 7.
Einziger Unterschied: Seine Datenbank ist lokal und keine MySQL-Datenbank.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Qt 4.7.3 lädt ohne Probleme Plugins von 4.7.0, siehe auch (wieder einmal...) die Doku: http://doc.trolltech.com/latest/deploym ... ynamically
Und das Tool Dependency Walker haben wir auch schon zig mal erwähnt... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
yarikata
Beiträge: 22
Registriert: 17. Mai 2011 16:40

Beitrag von yarikata »

Christian81 hat geschrieben:Qt 4.7.3 lädt ohne Probleme Plugins von 4.7.0, siehe auch (wieder einmal...) die Doku: http://doc.trolltech.com/latest/deploym ... ynamically
Und das Tool Dependency Walker haben wir auch schon zig mal erwähnt... :roll:
Habe ich gelesen und es ist auch logisch. Hilft aber kein Stück weiter!
Und Depence Walker habe ich auch schon benutzt - keine Fehler!
Antworten