Seite 1 von 1
[gelöst] QSQLITE Treiber wird nicht geladen
Verfasst: 21. Dezember 2011 11:55
von M@g!ndo$ch
Hallo,
ich versuche mich gerade an meiner ersten Qt Applikation mit Datenbankanbindung.
Für meine ersten Gehversuche, habe ich mich hieran orientiert:
http://www.developer.nokia.com/Communit ... base_in_Qt
Wenn ich mein Programm in Eclipse starte, sehe ich folgende Ausgabe in der Console:
Code: Alles auswählen
QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers:
Ich arbeite mit MinGW und Qt Open Source 4.3.0.
Qt habe ich mit '-qt-sql-sqlite -static' konfiguriert / kompiliert, da ich meine Applikation gerne statisch linken möchte.
In der .pro Datei steht folgendes:
Code: Alles auswählen
CONFIG += qt debug_and_release warn_on static
QT += network xml sql
Habe in der Qt Doku leider nix gefunden, was ich vergessen haben könnte

Kann mir bitte jemand weiterhelfen?
Viele vorweihnachtliche Grüße,
M@g
Re: QSQLITE Treiber wird nicht geladen
Verfasst: 21. Dezember 2011 12:22
von franzf
Re: QSQLITE Treiber wird nicht geladen
Verfasst: 21. Dezember 2011 13:44
von M@g!ndo$ch
Thx! Das bringt mich schonmal weiter!
Jetzt bekomm ich allerdings einige Fehler beim linken. Hier ein Beispiel:
Code: Alles auswählen
undefined reference to `QSqlDriverPlugin::QSqlDriverPlugin(QObject*)'
Fehlt da noch was in der .pro-Datei?
Re: QSQLITE Treiber wird nicht geladen
Verfasst: 21. Dezember 2011 13:53
von franzf
Linkst du auch gegen QtSql? (im .pro QT += sql).
Ist das die einzige Meldung des Linkers? Kommen vorher noch irgend welche Warnungen?
Re: QSQLITE Treiber wird nicht geladen
Verfasst: 21. Dezember 2011 14:12
von M@g!ndo$ch
franzf hat geschrieben:Linkst du auch gegen QtSql? (im .pro QT += sql).
Jupp, unter Anderem...siehe erster Post
franzf hat geschrieben:Ist das die einzige Meldung des Linkers? Kommen vorher noch irgend welche Warnungen?
Hier der gesamte Output ab da wo die Fehler passieren:
Code: Alles auswählen
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(smain.o)(.text+0x115): In function `ZN19QSQLiteDriverPluginC2Ev':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/smain.cpp:39: undefined reference to `QSqlDriverPlugin::QSqlDriverPlugin(QObject*)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(smain.o)(.text+0x145): In function `ZN19QSQLiteDriverPluginC1Ev':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/smain.cpp:39: undefined reference to `QSqlDriverPlugin::QSqlDriverPlugin(QObject*)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(smain.o)(.rdata$_ZTV19QSQLiteDriverPlugin[vtable for QSQLiteDriverPlugin]+0x8): In function `ZN5QListI7QStringE13detach_helperEv':
M:/Tools/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/new: undefined reference to `QSqlDriverPlugin::metaObject() const'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(smain.o)(.rdata$_ZTV19QSQLiteDriverPlugin[vtable for QSQLiteDriverPlugin]+0xc):M:/Tools/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/new: undefined reference to `QSqlDriverPlugin::qt_metacast(char const*)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(smain.o)(.rdata$_ZTV19QSQLiteDriverPlugin[vtable for QSQLiteDriverPlugin]+0x10):M:/Tools/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/new: undefined reference to `QSqlDriverPlugin::qt_metacall(QMetaObject::Call, int, void**)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(smain.o)(.text$_ZN19QSQLiteDriverPluginD1Ev[QSQLiteDriverPlugin::~QSQLiteDriverPlugin()]+0x22):M:/Tools/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/new: undefined reference to `QSqlDriverPlugin::~QSqlDriverPlugin()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(smain.o)(.text$_ZN19QSQLiteDriverPluginD0Ev[QSQLiteDriverPlugin::~QSQLiteDriverPlugin()]+0x22):M:/Tools/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/new: undefined reference to `QSqlDriverPlugin::~QSqlDriverPlugin()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x550): In function `ZN20QSQLiteResultPrivate7cleanupEv':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:116: undefined reference to `QSqlCachedResult::cleanup()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x61a): In function `ZN20QSQLiteResultPrivate11initColumnsEb':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:136: undefined reference to `QSqlCachedResult::init(int)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x1456): In function `ZN13QSQLiteResultC2EPK13QSQLiteDriver':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:233: undefined reference to `QSqlCachedResult::QSqlCachedResult(QSqlDriver const*)'
mingw32-make.exe[1]: Leaving directory `M:/cpp/LanPartySuite'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x14f4):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:235: undefined reference to `QSqlCachedResult::~QSqlCachedResult()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x156e): In function `ZN13QSQLiteResultC1EPK13QSQLiteDriver':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:233: undefined reference to `QSqlCachedResult::QSqlCachedResult(QSqlDriver const*)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x160c):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:235: undefined reference to `QSqlCachedResult::~QSqlCachedResult()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x16d3): In function `ZN13QSQLiteResultD2Ev':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:241: undefined reference to `QSqlCachedResult::~QSqlCachedResult()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x16fd):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:241: undefined reference to `QSqlCachedResult::~QSqlCachedResult()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x17c3): In function `ZN13QSQLiteResultD1Ev':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:241: undefined reference to `QSqlCachedResult::~QSqlCachedResult()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x17ed):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:241: undefined reference to `QSqlCachedResult::~QSqlCachedResult()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x18b3):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:241: more undefined references to `QSqlCachedResult::~QSqlCachedResult()' follow
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x1cb1): In function `ZN13QSQLiteResult4execEv':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:288: undefined reference to `QSqlCachedResult::clearValues()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.text+0x2664):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../sql/drivers/sqlite/qsql_sqlite.cpp:348: undefined reference to `QSqlCachedResult::cache()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.rdata$_ZTV13QSQLiteResult[vtable for QSQLiteResult]+0x40): In function `ZNK12QBasicAtomicntEv':
M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../../include/QtCore/../../src/corelib/kernel/qmetatype.h: undefined reference to `QSqlCachedResult::data(int)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.rdata$_ZTV13QSQLiteResult[vtable for QSQLiteResult]+0x44):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../../include/QtCore/../../src/corelib/kernel/qmetatype.h: undefined reference to `QSqlCachedResult::isNull(int)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.rdata$_ZTV13QSQLiteResult[vtable for QSQLiteResult]+0x4c):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../../include/QtCore/../../src/corelib/kernel/qmetatype.h: undefined reference to `QSqlCachedResult::fetch(int)'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.rdata$_ZTV13QSQLiteResult[vtable for QSQLiteResult]+0x50):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../../include/QtCore/../../src/corelib/kernel/qmetatype.h: undefined reference to `QSqlCachedResult::fetchNext()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.rdata$_ZTV13QSQLiteResult[vtable for QSQLiteResult]+0x54):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../../include/QtCore/../../src/corelib/kernel/qmetatype.h: undefined reference to `QSqlCachedResult::fetchPrevious()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.rdata$_ZTV13QSQLiteResult[vtable for QSQLiteResult]+0x58):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../../include/QtCore/../../src/corelib/kernel/qmetatype.h: undefined reference to `QSqlCachedResult::fetchFirst()'
M:/sdk/qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/plugins/sqldrivers//libqsqlited.a(qsql_sqlite.o)(.rdata$_ZTV13QSQLiteResult[vtable for QSQLiteResult]+0x5c):M:/Tools/Qt/qt-win-opensource-src-4.3.0-win32-gPlusPlus-static/src/plugins/sqldrivers/sqlite/../../../../include/QtCore/../../src/corelib/kernel/qmetatype.h: undefined reference to `QSqlCachedResult::fetchLast()'
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [bin\debug\LanPartySuite.exe] Error 1
m:\tools\MinGW\bin\mingw32-make.exe: *** [debug] Error 2
Muss ich evtl. Qt nochmal mit der Option '-plugin-sql-sqlite' bauen? Ich dachte man braucht das Plugin nur, wenn man seine Applikation nicht statisch linkt. Daher habe Qt nur mit der Option '-qt-sql-sqlite' gebaut.
Welche Dateien (Libs) müssten denn wo vorhanden sein, damit alles verfügbar ist?
Gruß und Danke für deine Hilfe!
Re: QSQLITE Treiber wird nicht geladen
Verfasst: 25. Dezember 2011 09:40
von franzf
Ich hab bisher noch nie Qt selber kompiliert, ich lass das mein Paketverwaltungssystem machen (verwende Gentoo), von dem her kann ich nur die Doku zitieren, und die sagt:
Plugins can be linked statically against your application. If you build the static version of Qt, this is the only option for including Qt's predefined plugins.
Leider steht nicht dabei, wie Qt konfiguriert werden muss (also -qt-sql-sqlite oder -plugin-sql-sqlite).
Dass es prinzipiell funktioniert, siehst du ja. Der Linkerfehler sagt auch nichts über das Plugin selber, sondern über fehlende Symbole aus libQtSql. Entweder es funktioniert wirklich, wenn du mit "-static -plugin-sql-sqlite" kompilierst, oder es ist ein Fehler im Buildsystem... Falls letzteres, hilft nur patchen oder auf eine aktuelle Version updaten (wir sind mittlerweile bei 4.8.0), die 4.3.0 ist vom Mai 2007!
Re: QSQLITE Treiber wird nicht geladen
Verfasst: 25. Dezember 2011 09:58
von M@g!ndo$ch
Hey,
habe mittlerweile Qt mit beiden Optionen neu kompiliert. Leider hat das nichts geändert.
Habe letztens versucht Qt V 4.6.7 zu kompilieren. Da bekomme ich aber leider schon beim Kompilieren von Qt selber Compilerfehler

Deshalb benutze ich noch die alte Version. Ich versuch jetzt mal die allerneuste Version.
Ach ja, frohe Weihnachten übrigens

Re: QSQLITE Treiber wird nicht geladen
Verfasst: 25. Dezember 2011 11:14
von franzf
Ich habs jetzt mal ausprobiert, und es hat geklappt

Qt-4.8.0 auf Linux, selber kompiliert
configure:
Code: Alles auswählen
./configure -no-webkit -no-svg -no-script -no-javascript-jit -no-declarative -no-scripttools -no-declarative-debug -no-multimedia -no-xmlpatterns -no-qt3support -no-accessibility -plugin-sql-sqlite --prefix=/home/franz/local/test -no-sql-db2 -no-sql-sqlite2 -no-sql-mysql -no-sql-odbc -no-sql-ibase -no-sql-psql -no-gtkstyle -static
.pro:
Code: Alles auswählen
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
CONFIG += static
QT += sql
QT -= gui
QTPLUGIN += qsqlite
# Input
SOURCES += main.cpp
main.cpp
Code: Alles auswählen
#include <QtSql>
Q_IMPORT_PLUGIN(qsqlite)
int main() {
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
if(!db.open())
qDebug() << "Could not open db";
}
Baut, läuft, usw

Re: QSQLITE Treiber wird nicht geladen
Verfasst: 26. Dezember 2011 01:25
von M@g!ndo$ch
Supi...THX! Dann werd ich das mal auch so versuchen.
Gruß
Re: QSQLITE Treiber wird nicht geladen
Verfasst: 7. Januar 2012 14:19
von M@g!ndo$ch
Sodale....nachdem ich deine Tips befolgt habe und zusätzlich noch das hier
http://www.qtcentre.org/wiki/index.php? ... on_Windows
funktioniert es bei mir jetzt auch.
DANKE nochmal für die Hilfe!