MySQL und QT statisch kompilieren

Verschiedenes zu Qt
Antworten
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

MySQL und QT statisch kompilieren

Beitrag von Phorx »

Hallo,

ich habe ein kleines Programm geschrieben in dem ich MySQL nutze. Nach einiger Zeit hatte ich QT dann auch so kompiliert dass mein Programm kompiliert wurde.
Allerdings wollte ich das ganze jetzt auch statisch kompilieren, dass ich es auch auf anderen Rechnern laufen lassen kann.

Problem: Bekomme lauter "Verweis auf nicht aufgelöstes externes Symbol"-Fehler. Hab auch schon versucht was in der Dokumentation zu "Plugins in statischen Programmen nutzen" steht - allerdings ohne all zu großen Erfolg. Danach bekam ich 100 Fehler mehr vom nmake :( ... die mir alle sagen, dass sie die ganzen MySQL Funktionen und Klassen nicht kennen.

Kann mir vielleicht jemand kurz und funktionierend sagen wie ich QT + MySQL statisch bekomm und danach mein Projekt kompilieren muss?
(QT "in normal" hab ich schon statisch kompiliert und auch statische Projekte kompiliert, die sogar auf anderen Rechnern liefen
:lol: :wink: - Problem besteht also darin MySQL dazu zu bekommen)

Vielen Dank schonmal an alle die versuchen zu helfen :) .
MfG Phillip
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag von Phorx »

Ich hab das ganze nochmal mit MingW (anstatt Visual Studio) versucht, weil es dazu ja bereits eine Anleitung gibt. Hat soweit auch gut geklappt, beim kompilieren bekomm ich jedoch sehr ähnliche Fehler wie vorher mit Visual Studio ...

Code: Alles auswählen

release/primecom.o:primecom.cpp:(.text+0x784): undefined reference to `QSqlDatab
ase::defaultConnection'
release/primecom.o:primecom.cpp:(.text+0x7ba): undefined reference to `QSqlDatab
ase::addDatabase(QString const&, QString const&)'
release/primecom.o:primecom.cpp:(.text+0x812): undefined reference to `QSqlDatab
ase::setHostName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x850): undefined reference to `QSqlDatab
ase::setDatabaseName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x88e): undefined reference to `QSqlDatab
ase::setUserName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x8cc): undefined reference to `QSqlDatab
ase::setPassword(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x8ee): undefined reference to `QSqlDatab
ase::open()'
release/primecom.o:primecom.cpp:(.text+0x8f9): undefined reference to `QSqlDatab
ase::isOpen() const'
release/primecom.o:primecom.cpp:(.text+0x90f): undefined reference to `QSqlDatab
ase::QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x93d): undefined reference to `QSqlQuery
::QSqlQuery(QString const&, QSqlDatabase)'
release/primecom.o:primecom.cpp:(.text+0x95c): undefined reference to `QSqlDatab
ase::~QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x96a): undefined reference to `QSqlQuery
::isActive() const'
release/primecom.o:primecom.cpp:(.text+0xa05): undefined reference to `QSqlDatab
ase::close()'
release/primecom.o:primecom.cpp:(.text+0xa13): undefined reference to `QSqlQuery
::~QSqlQuery()'
release/primecom.o:primecom.cpp:(.text+0xa1e): undefined reference to `QSqlDatab
ase::~QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0xac4): undefined reference to `QSqlDatab
ase::close()'
release/primecom.o:primecom.cpp:(.text+0xb59): undefined reference to `QSqlQuery
::record() const'
release/primecom.o:primecom.cpp:(.text+0xb68): undefined reference to `QSqlRecor
d::indexOf(QString const&) const'
release/primecom.o:primecom.cpp:(.text+0xb70): undefined reference to `QSqlRecor
d::~QSqlRecord()'
release/primecom.o:primecom.cpp:(.text+0xbb1): undefined reference to `QSqlQuery
::record() const'
release/primecom.o:primecom.cpp:(.text+0xbc0): undefined reference to `QSqlRecor
d::indexOf(QString const&) const'
release/primecom.o:primecom.cpp:(.text+0xbce): undefined reference to `QSqlRecor
d::~QSqlRecord()'
release/primecom.o:primecom.cpp:(.text+0xc17): undefined reference to `QSqlQuery
::next()'
release/primecom.o:primecom.cpp:(.text+0xc37): undefined reference to `QSqlQuery
::value(int) const'
release/primecom.o:primecom.cpp:(.text+0xc80): undefined reference to `QSqlDatab
ase::close()'
release/primecom.o:primecom.cpp:(.text+0xe9c): undefined reference to `QSqlDatab
ase::defaultConnection'
release/primecom.o:primecom.cpp:(.text+0xed8): undefined reference to `QSqlDatab
ase::addDatabase(QString const&, QString const&)'
release/primecom.o:primecom.cpp:(.text+0xf39): undefined reference to `QSqlDatab
ase::setHostName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0xf80): undefined reference to `QSqlDatab
ase::setDatabaseName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0xfc7): undefined reference to `QSqlDatab
ase::setUserName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x100e): undefined reference to `QSqlData
base::setPassword(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x1036): undefined reference to `QSqlData
base::open()'
release/primecom.o:primecom.cpp:(.text+0x1044): undefined reference to `QSqlData
base::isOpen() const'
release/primecom.o:primecom.cpp:(.text+0x10e8): undefined reference to `QSqlData
base::close()'
release/primecom.o:primecom.cpp:(.text+0x10f6): undefined reference to `QSqlData
base::~QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x1401): undefined reference to `QSqlData
base::QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x1417): undefined reference to `QSqlQuer
y::QSqlQuery(QString const&, QSqlDatabase)'
release/primecom.o:primecom.cpp:(.text+0x141f): undefined reference to `QSqlData
base::~QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x142d): undefined reference to `QSqlQuer
y::isActive() const'
release/primecom.o:primecom.cpp:(.text+0x14d7): undefined reference to `QSqlData
base::close()'
release/primecom.o:primecom.cpp:(.text+0x1518): undefined reference to `QSqlData
base::close()'
release/primecom.o:primecom.cpp:(.text+0x1534): undefined reference to `QSqlQuer
y::~QSqlQuery()'
release/primecom.o:primecom.cpp:(.text+0x155c): undefined reference to `QSqlData
base::~QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x179c): undefined reference to `QSqlData
base::defaultConnection'
release/primecom.o:primecom.cpp:(.text+0x17d5): undefined reference to `QSqlData
base::addDatabase(QString const&, QString const&)'
release/primecom.o:primecom.cpp:(.text+0x1830): undefined reference to `QSqlData
base::setHostName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x1871): undefined reference to `QSqlData
base::setDatabaseName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x18b2): undefined reference to `QSqlData
base::setUserName(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x18f3): undefined reference to `QSqlData
base::setPassword(QString const&)'
release/primecom.o:primecom.cpp:(.text+0x1915): undefined reference to `QSqlData
base::open()'
release/primecom.o:primecom.cpp:(.text+0x1920): undefined reference to `QSqlData
base::isOpen() const'
release/primecom.o:primecom.cpp:(.text+0x1960): undefined reference to `QSqlData
base::lastError() const'
release/primecom.o:primecom.cpp:(.text+0x1975): undefined reference to `QSqlErro
r::text() const'
release/primecom.o:primecom.cpp:(.text+0x1a75): undefined reference to `QSqlErro
r::~QSqlError()'
release/primecom.o:primecom.cpp:(.text+0x1a80): undefined reference to `QSqlData
base::close()'
release/primecom.o:primecom.cpp:(.text+0x1a8b): undefined reference to `QSqlData
base::~QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x1bd5): undefined reference to `QSqlData
base::QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x1beb): undefined reference to `QSqlQuer
y::QSqlQuery(QString const&, QSqlDatabase)'
release/primecom.o:primecom.cpp:(.text+0x1bf3): undefined reference to `QSqlData
base::~QSqlDatabase()'
release/primecom.o:primecom.cpp:(.text+0x1bfb): undefined reference to `QSqlQuer
y::isActive() const'
release/primecom.o:primecom.cpp:(.text+0x1d79): undefined reference to `QSqlQuer
y::record() const'
release/primecom.o:primecom.cpp:(.text+0x1d88): undefined reference to `QSqlReco
rd::indexOf(QString const&) const'
release/primecom.o:primecom.cpp:(.text+0x1d90): undefined reference to `QSqlReco
rd::~QSqlRecord()'
release/primecom.o:primecom.cpp:(.text+0x1dd1): undefined reference to `QSqlQuer
y::record() const'
release/primecom.o:primecom.cpp:(.text+0x1de0): undefined reference to `QSqlReco
rd::indexOf(QString const&) const'
release/primecom.o:primecom.cpp:(.text+0x1de8): undefined reference to `QSqlReco
rd::~QSqlRecord()'
release/primecom.o:primecom.cpp:(.text+0x1e29): undefined reference to `QSqlQuer
y::record() const'
release/primecom.o:primecom.cpp:(.text+0x1e38): undefined reference to `QSqlReco
rd::indexOf(QString const&) const'
release/primecom.o:primecom.cpp:(.text+0x1e46): undefined reference to `QSqlReco
rd::~QSqlRecord()'
release/primecom.o:primecom.cpp:(.text+0x1e68): undefined reference to `QSqlQuer
y::next()'
release/primecom.o:primecom.cpp:(.text+0x1e8e): undefined reference to `QSqlQuer
y::value(int) const'
release/primecom.o:primecom.cpp:(.text+0x1f87): undefined reference to `QSqlData
base::close()'
release/primecom.o:primecom.cpp:(.text+0x1f8f): undefined reference to `QSqlQuer
y::~QSqlQuery()'
collect2: ld returned 1 exit status
Wäre super wenn mir jemand helfen könnte :)
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Statisches kompilieren ist AFAIK nicht LGPL EDIT:remove GPL EDIT konform oder?
Das heisst du bräuchtest dann eine kommerzielle Version. Was spricht denn gegen dynamische?

Die unaufgelösten externen Verweise bedeuten das er die Files in denen sich die Funktionen befinden nicht finden kann. Also entweder du hast die nicht in deinem Pfad oder die Dateien sind nicht existent. Check das doch mal!
Tritt dieser Fehler auf wenn du das Plugin kompilierst oder wenn du deine App kompilierst?
Zum Thema MySql mal die Forensuche benutzen-da gibts immer mal wieder nen Thread zu!

Ansonsten wären mehr Infos hilfreich!
Zuletzt geändert von AuE am 28. Juli 2009 12:46, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Das sollte helfen:
http://doc.qtsoftware.com/4.5/plugins-h ... ic-plugins

// edit
Und sicher ist statisch linken GPL-konform, wenn auch der Sourcecode zur Verfügung steht (eben GPL). Wenn man aber Qt als LGPL verwendet, und eben seinen Sourcecode nicht rausrückt, ist statisch linken untersagt.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Wenn man aber Qt als LGPL verwendet, und eben seinen Sourcecode nicht rausrückt, ist statisch linken untersagt.
Sicher?
Soweit ich LGPL verstanden habe muss man bei der LGPL den Code nicht mehr offen legen. Man muss aber jedem erlauben die benutzten Quellen (in dem Fall die Qt Libs) auszutauschen.... Oder hab ich da was flasch in erinnerung?
Mit GPL hast recht-mein Fehler!
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag von Phorx »

Franz das hab ich bereits versucht - nur mit Visual Studio. Da kamen aber die gleichen Fehler... die .h-dateien ( welche zuvor vom Compiler gefordert werden ) sind im gleichen verzeichnis wie das projekt.
Das Projekt habe ich bereits im Visual Studio kompiliert. Klappt alles. Aber ich bekomms auf anderen Rechnern (ohne QT) nicht zum Laufen, hab bereits versucht die ganzen dlls (die Dependency Walker mir nennt) dazu zu legen aber brachte auch nichts.

Langsam verzweifel ich an MySQL + QT :?

edit: Was für Informationen wären denn ansonsten noch nützlich?

MfG Phillip
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag von Mani99 »

Warum verwenden alle unter windows diesen microsoft krempel?

QtCreator + QT + MinGW und alles funktioniert bestens, ich hätte noch nie probleme gehabt das etwas nicht funktioniert.

Außerdem wüsste ich nicht was die microsoft ide mehr/brauchbareres kann als der qtcreator?
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag von Phorx »

was das besseres kann weiss ich auch nicht ;)

Ich hab ja mittlerweile auch Mingw versucht. Aber klappt genauso wenig wie mit dem "Microsost Krempel"... mich würde es sehr freuen wenn ich egal mit welchem Compiler/IDE ein MySQL+QT - Programm auf anderen Rechnern ausführen könnte. Wie und womit ist mir egal, hauptsache es klappt...
Zuletzt geändert von Phorx am 28. Juli 2009 15:06, insgesamt 1-mal geändert.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Man kann in der IDE die einzelnen Fenster verschieben ohne das man neu kompilieren muss ;-)

Aber im Prinzip hast du da recht! Auch wenn einige Sacehn im Creator noch recht schwer zu finden sind-aber für den hausgebrauch ist er super-und auch auf Arbeit kann man einiges mit anfangen!
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag von Phorx »

Hmm ok. Bin jetzt soweit gekommen, das ich die Anwendung auf anderen Rechnern starten kann.

Jetzt hab ich das Problem das ich keine MySql-Verbindung hin bekommen. Weil der MySQLDriver nicht gefunden wird. Auf meinem Rechner klappt es allerdings.
Wo muss ich jetzt welche Dateien hinkopieren damit der fremde Rechner weiss wo er den MySQL-Treiber findet?
( einfach nur die QMySQLDriver in das Anwendungsverzeichnis hat leider nicht funktioniert )
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn franfz schon einen Link gepostet hat sollte man ihn ggf. auch lesen: http://doc.trolltech.com/4.5/plugins-ho ... extensions
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag von Phorx »

Da finde ich nichts was meine Frage beantwortet.
Dort wird ja nur gesagt das man Plugins selbst schreiben kann (was ich nicht möchte) und das man statische Plugins erstellen kann... möchte ich allerdings nur wenn es nicht anders geht. Da in der Dokumentation ja kein anderer Weg genannt wird geh ich davon aus dass man den MySQL-Treiber nicht durch das mitgeben von irgendwelchen Librarys auf anderen Sytemen laden kann, sondern ausschließlich durch das erstellen von Plugins!?
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag von Phorx »

An alle die das gleiche Problem haben:

Wenn man alle benötigten dlls und die kompilierte exe auf den fremden Rechner kopiert hat, muss man noch einen Unterordner 'sqldrivers' im verzeichnis anlegen, wo die exe liegt. Dort kopiert man den Inhalt aus %QTDIR%/plugins/sqldrivers rein. Fertig.

MfG Phillip
Antworten