QtSql findet postgres treiber nicht und will QCoreApplication
-
Hast Du meinen Post überhaupt gelesen?
'Und jetzt auf dbSQL = QSqlDatabase::addDatabase("QPSQL"); einen breakpoint setzen, im Debugger starten und den backtrace anschauen.'
-
hi @Dany
ist das eigentlich nur der Fall für nen debug build oder auch wenn du es über release machst ?
Hab mal
section .gnu_debuglink not found
gegoogled und dieser StackOverflow threat ist dabei heraus gesprungen
https://stackoverflow.com/questions/32560862/cant-debug-in-qt-creator-with-cmake-project/32560926#32560926Könnte interessant sein, da es explizit um cmake geht, hier und auf Stackoverflow
-
@Christian-Ehrlicher Ja habe ich. Nur muss ich gestehen, mit Debugger bin ich jetzt nicht wirklich firm. Unter Linux mit Visual Studio Code funktioniert das, aber wie ich das mit MinGW mache weiss ich leider nicht wirklich.
@J-Hilk Ja das ist auch bei Release so. Ich hab jetzt auch, um mal sicher zu gehen das es nicht an qemu liegt, dass alles zusammengepackt und auf einem nativen Windows gestartet. Läuft super, nur eben das Plugin kann nicht geladen werden.
-
Also, ich wurschtele mich gerade in gdb ein. Einen Break habe ich auf addDatabase gesetzt, wo auch brave angehalten wird und danach habe ich Backtrace benutzt. So sieht das dann aus.
(gdb) break addDatabase Breakpoint 1 at 0x40c6c0 (gdb) run Starting program: c:\wsc\win-build\wsc.exe [New Thread 292.0x1448] [New Thread 292.0xccc] [New Thread 292.0x151c] Thread 1 hit Breakpoint 1, 0x000000006d7c8d56 in QSqlDatabase::addDatabase(QString const&, QString const&) () from C:\Qt-5-15\5.15.2\mingw81_64\bin\Qt5Sql.dll (gdb) backtrace #0 0x000000006d7c8d56 in QSqlDatabase::addDatabase(QString const&, QString const&) () from C:\Qt-5-15\5.15.2\mingw81_64\bin\Qt5Sql.dll #1 0x000000000040bdcb in main (argc=1, argv=0xb4350) at ../main.cpp:25 (gdb)
Da ich jetzt nicht glaube, dass das besonders weitergeholfen hat würde ich darum bitten, mir da ein bisschen zu helfen.
-
Dann zeige mal deine main.cpp, vor allem Zeile 25
-
Bitteschön
int main(int argc, char* argv[]) { QApplication app(argc, argv); db.setdbSQL(QSqlDatabase::addDatabase("QPSQL")); // Line 25 konfig.ladeThema("wsc-standard"); ich.setOnline(false); ich.loadPrivateKey(); HauptWindow hw; hw.show(); return app.exec(); }
-
Und wenn Du dann dort einen step weiter gehst kommt die Fehlermeldung auf stdout?
Bitte auch mal mit der Umgebungsvariablen QT_FATAL_WARNINGS im Debugger starten und schauen wo er dann crasht. -
@Christian-Ehrlicher Genau. An der Stelle taucht dann die Meldung auf, dass der Driver nicht geladen werden konnte. Obwohl sie ja in der selben Ausgabe angezeigt wird.
Was ich mittlerweile herausgefunden habe, wie es scheint kann Qt auch dann einen Treiber nicht laden, wenn dem irgendwas fehlt. So bin ich auch drauf gekommen, dass Architekturunterschiede da Probleme machen können. Eben der Driver wäre 32 Bit und das Programm 64 Bit. Was ich mir aber hier nicht wirklich vorstellen kann. Ausserdem habe ich die Treiber ja nach Anleitung von der Qt Website gebaut und das hat hervorragend funktioniert.
Wenn ich QT_FATAL_WARNINGS auf 1 setze, startet das Programm gar nicht erst :(
-
Ich habe mich eher darauf konzentiert:
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
Das der postgresql-Treiber nicht geladen wird liegt wie @J-Hilk schon geschrieben hat an fehlendenden Depenencies -> Dependency Walker benutzen und schauen was das Qt psql-Plugin benötigt.
-
@Christian-Ehrlicher said in QtSql findet postgres treiber nicht und will QCoreApplication:
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
Das hat sich ja schon erledigt, seit ich addDatabase() aus der Klasse in die Main gepackt habe.
-
So. Ich hab das jetzt mal ausprobiert und anscheinend fehlt dem Ding die libpq.dll. Die ist aber natürlich mal wieder vorhanden. Ich meine aber gesehen zu haben, läuft nicht mit MinGW zusammen. Also hab ich versucht sie unter MinGW zu bauen. Funktioniert hat configure problemlos, aber wenn ich make verwende, dann fehlt die datei bki-stamp. Super.
Der Walker spukt unter anderem folgendes:
Error: At least one required implicit or forwarded dependency was not found. Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module. Error: Modules with different CPU types were found. Error: A circular dependency was detected. Warning: At least one delay-load dependency module was not found. Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
-
@Dany said in QtSql findet postgres treiber nicht und will QCoreApplication:
Was ist denn das jetzt schon wieder :(
Das kannst du ignorieren
-
Okay. Wir kann ich denn rausfinden, wie viel Bit die DLL hat? Laut windeplayqt ist mein Programm 64 Bit, wobei mich alles andere auch gewundert hätte. Im Walker bekomme ich aber immer noch die Meldung mit den verschiedenen CPU.
Liegt es denn im Bereich des Möglichen, dass mein Problem doch etwas mit qemu zu tun hat? Weil mein Windows hier ja virtuell läuft.
-
@Dany said in QtSql findet postgres treiber nicht und will QCoreApplication:
dass mein Problem doch etwas mit qemu zu tun hat? Weil mein Windows hier ja virtuell läuft.
Bezweifle ich. Welche DLLs sind es denn?