[gelöst] MySql - LibraryPath

Alles rund um die Programmierung mit Qt
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

[gelöst] MySql - LibraryPath

Beitrag von Marco812 »

Hallo,

wenn ich eine Anwendung als static Kompilliere und versuche mit dieser von einem anderen PC auf eine MySql Datenbank anzusprechen, erhalte ich die Fehlermeldung „driver not load“

Der Treiber befindet sich doch schon fertig unter: QTDIR\plugins\sqldriversqsqlmysql.dll

QDir* dir=new QDir();
dir->convertToAbs();
app.addLibraryPath(dir->currentDirPath() );

und so gebe ich den Treiberpfad an. Auch wenn ich den Treiber neu erstelle, ändert sich nichts:

cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" mysql.pro
nmake

auf dem Entwicklungsrechner funktioniert alles ohne Probleme. Welche *.dll’s und Dateien benötige ich und wie muss ich den Plugin Pfad angeben?

Gruß

Marco

P.S.
Der Treiber befindet sich natürlich im Programmverzeichnis, in dem auch meine *.exe ist.
Zuletzt geändert von Marco812 am 15. März 2006 21:43, insgesamt 1-mal geändert.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

beim statischen linken gehen keine Plug-ins!!!
Siehe Doku. Da muste du denn die lib mit dem Parameter -qt-sql-mysql übersetzen.
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

ok ich habe jetzt folgendes gemacht, configure -qt-sql-mysql und wo bekomme ich jetzt die passende libmySQL.dll her, genau das gleiche problem habe ich dann auch mit SQLite sqlite3.dll. Muss ich sonst noch etwas beachten?

Gruß

Marco
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

du braucht keine DLL mehr.
Da du denn gegen mysqlclient.lib und nicht libmysql.lib linken must.
Mit SQL Lite ist das kein Problem, da dies eh statisch gelinkt wird.
Nur must du denn sagen -qt-sql-sqlite
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

ich habe jetzt das QT so konfigurieren wollen: configure -qt-sql-mysql -I C:\mysql\include -L C:\mysql\lib\opt -qt-sql-sqlite -static -release –fast

Nun erhalte ich folgende Fehler:

QtSql.lib(qsql_mysql.obj) : error LNK2019: Nicht aufgelöstes externes Symbol '_m
ysql_fetch_row@4', verwiesen in Funktion '"protected: virtual bool __thiscall QM
YSQLResult::fetchNext(void)" (?fetchNext@QMYSQLResult@@MAE_NXZ)'
QtSql.lib(qsql_mysql.obj) : error LNK2019: Nicht aufgelöstes externes Symbol '_m
ysql_stmt_fetch@4', verwiesen in Funktion '"protected: virtual bool __thiscall Q
MYSQLResult::fetchNext(void)" (?fetchNext@QMYSQLResult@@MAE_NXZ)'

//…gekürzt!!!

ysql_list_tables@8', verwiesen in Funktion '"public: virtual class QStringList _
_thiscall QMYSQLDriver::tables(enum QSql::TableType)const " (?tables@QMYSQLDrive
r@@UBE?AVQStringList@@W4TableType@QSql@@@Z)'
release\books.exe : fatal error LNK1120: 45 unaufgelöste externe Verweise
NMAKE : fatal error U1077: 'link': R³ckgabe-Code '0x460'
Stop.
NMAKE : fatal error U1077: '"C:\Programme\Microsoft Visual Studio .NET 2003\VC7\
BIN\nmake.exe"': R³ckgabe-Code '0x2'
Stop.

Warum erhalte ich diese Fehler und was kann ich dagegen machen?

Vorab noch eine weitere frage sollte QT dann so konfiguriert sein, kann ich einfach MySQL und SQLite nutzen, oder muss ich in meiner *.pro noch mysqlclient.lib hinzufügen? Für SQLite muss ich doch nur den aktuellen Source in das Verzeichnis QTDIR\src\3rdparty\sqlite stellen und QT konfigurieren oder?

Gruß

Marco812
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Ja du kannst denn beides nutzen. Der Fehler kommt daher, dann es ein Symbol in deiner MySQL Bibliothek nicht findet. Da deine config Zeile falsch ist.
So sollte es heissen:
configure -qt-sql-mysql -I C:\mysql\include -L C:\mysql\lib\opt -lmysqlclient -qt-sql-sqlite -static -release –fast
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

nun erhalte ich eine neue Fehlermeldung, wie kann ich dieses Problem beheben?

-I"C:/QT/mkspecs/win32-msvc.net" -Fotmp\obj\release_static\ @C:\DOKUME~1\xdfON~
1\LOKALE~1\Temp\nm12A.tmp
moc_bookwindow.cpp
link /LIBPATH:"C:\QT\lib" /LIBPATH:"C:\QT\lib" /NOLOGO /NODEFAULTLIB:"li
bc" /SUBSYSTEM:WINDOWS /OUT:"release\books.exe" @C:\DOKUME~1\xdfON~1\LOKALE~1\T
emp\nm12B.tmp
libcmt.lib(dosmap.obj) : error LNK2005: __errno bereits in MSVCRT.lib(MSVCR71.dl
l) definiert
libcmt.lib(dosmap.obj) : error LNK2005: ___doserrno bereits in MSVCRT.lib(MSVCR7
1.dll) definiert
libcmt.lib(tolower.obj) : error LNK2005: _tolower bereits in MSVCRT.lib(MSVCR71.

//…gekürzt!!!

LINK : warning LNK4098: Standardbibliothek 'MSVCRT' steht in Konflikt mit andere
n Bibliotheken; /NODEFAULT:Bibliothek verwenden
MSVCRT.lib(cinitexe.obj) : warning LNK4098: Standardbibliothek 'libcmt.lib' steh
t in Konflikt mit anderen Bibliotheken; /NODEFAULT:Bibliothek verwenden
release\books.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Sy
mbole gefunden
NMAKE : fatal error U1077: 'link': R³ckgabe-Code '0x491'
Stop.

Gruß

Marco812
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Also Qt haste jetzte erst mal übersetzt:)
wo kommt denn die libcmt.lib her?
Es scheint eine Funktion 2 mal zu geben einmal in dieser Lib und einmal in der Lib von MS.
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

also ich habe die libcmt.lib einmal in C:\Programme\Microsoft Visual Studio 6\VC98\Lib und einmal in C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\lib

verstehe aber nicht warum das einen Fehler verursacht. Im QT Verzeichnis ist die libcmt.lib nicht zu finden!

Wie würdest du jetzt weiter vorgehen?

Gruß

Marco812
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du versuchst eine statische qt-dll mit einer dynamischen mysql-lib zu linken was nicht gehen kann.
Ich frage mich nur woher dieser blöde static-Hype kommt - bringt keinen Vorteil und macht nur Probleme :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,
wo bekomme ich dann bitte die statische mysql-lib her?
Gruß
Marco812
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Die ist automatisch dabei, wenn du bei der MySQL Installation die Developer Tools installieren läßt. Dann hast du 2 Libs. libmysql zum dynamisch und mysqlclient.lib zum statisch linken.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Christian81 hat geschrieben:Ich frage mich nur woher dieser blöde static-Hype kommt - bringt keinen Vorteil und macht nur Probleme :roll:
Probleme bringen doch wohl ehr DLLs. Da man nie weiß was da ist, muß man immer alles mitliefern, und das ist im Endeffekt deutlich mehr als ein statisch gelinktes Programm. Allein die QtGui4.dll ist fast 4 MB schwer, QtCore braucht man immer, noch ein MB. Das selbe Programm statisch gelinkt ist gerade mal 900K groß.

Aber die Dateigröße ist nicht das Problem. Selbst wenn ich weiß das Qt auf einem Rechner installiert ist, muß ich trotzdem meine DLLs mit liefern, da ich nie sicher gehen kann, das Qt so compiliert wurde wie ich es brauche.

Also, wo ist der Vorteil des dynamischen Linkens, wenn ich dann doch wieder alles mitliefern muß? Nur weil ich Programmteile austauschen kann, ohne das Programm neu compilieren zu müssen?

Qt4 muss dynamisch gelinkt werden, sonst verbaut man sich einiges. Damit habe ich mich abgefunden, der Sinn erschließt sich mir jedoch nicht.
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

also ich habe mir jetzt noch mal mysql-noinstall-5.0.19-win32.zip herunter geladen und so konfiguriert, configure -qt-sql-mysql -I C:\mysql\include -L C:\mysql\lib\opt -l mysqlclient -qt-sql-sqlite -static -release der gleiche fehler wieder, ich habe nur zwei mal die lib einmal in MYSQLDIR\lib\opt und einmal in MYSQLDIR\lib\debug aber die wird es wohl nicht sein oder?

Gruß

Marco812
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

es will einfach nicht gelingen, was muss ich denn an configure übergeben, wenn ich die libmysql.dll und sqlite3.dll im release verwenden möchte? Bei mir funktioniert es nur in der Debug version.

Gruß

Marco812
Antworten