Qt4,WinXP und PostgreSQL-Plugin

Alles rund um die Programmierung mit Qt
Antworten
joergb
Beiträge: 21
Registriert: 13. Juli 2005 13:11
Kontaktdaten:

Qt4,WinXP und PostgreSQL-Plugin

Beitrag von joergb »

Hallo,

Konfiguration: Windows XP, GPL-Version von Qt4, PostgreSQL 8.0

Kann mit Qt4/mingw Programme kompilieren und starten, aber der Zugriff auf PostgreSQL-Datenbanken funktioniert nicht.
Fehlermeldung der Anwendung: Driver not loaded.
Unter C:\Qt\4.0.0\plugins\sqldrivers sind auch keine PostgreSQL-Treiber vorhanden. Ein Versuch diese unter C:\Qt\4.0.0\src\plugins\sqldrivers\psql zu kompilieren scheitert, da er die Libs nicht findet. Fehlerausgabe:

Code: Alles auswählen

C:\Qt\4.0.0\src\plugins\sqldrivers\psql>make
mingw32-make -f Makefile.Debug all
mingw32-make[1]: Entering directory `C:/Qt/4.0.0/src/plugins/sqldrivers/psql'
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runt
ime-pseudo-reloc -shared -Wl,--out-implib,C:\Qt\4.0.0\plugins\sqldrivers\libqsql
psqld.a -o "..\..\..\..\plugins\sqldrivers\qsqlpsqld.dll" tmp\obj\debug_shared\m
ain.o tmp\obj\debug_shared\qsql_psql.o tmp\obj\debug_shared\moc_qsql_psql.o  -L"
C:\Qt\4.0.0\lib" -L"C:\Qt\4.0.0\lib"  -lpq.lib -lws2_32 -ladvapi32 -L"C:\Program
me\PostgreSQL\8.0\lib\ms" -L"C:\Programme\PostgreSQL\8.0\lib" -lQtCored4 -lQtSql
d4
C:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot fin
d -lpq.lib
collect2: ld returned 1 exit status
mingw32-make[1]: *** [..\..\..\..\plugins\sqldrivers\qsqlpsqld.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.0.0/src/plugins/sqldrivers/psql'
mingw32-make: *** [debug-all] Error 2
Die Include- und Lib-Verzeichnisse von PostgreSQL wurden eingebunden.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Das schein ein generesses Probelm mit Qt unter Windows zu sein.
Bei mit geht nut der ODBC Treiber. Alle andren werden zwar sauber übersetzt und installiert, aber von Qt nicht gefunden. Unter Linux tritt das Problem nicht auf.
joergb
Beiträge: 21
Registriert: 13. Juli 2005 13:11
Kontaktdaten:

Linken funktioniert, Datenbank-Verb. noch nicht

Beitrag von joergb »

Mit folgender psql.pro funktioniert das Linken jetzt:

Code: Alles auswählen

TARGET	 = qsqlpsql

HEADERS		= ../../../sql/drivers/psql/qsql_psql.h
SOURCES		= main.cpp \
		  ../../../sql/drivers/psql/qsql_psql.cpp
unix {
	!contains( LIBS, .*pq.* ) {
	    LIBS	*= -lpq
	}
}

win32 {
#        !contains(LIBS, .*pq.* ) {
#            LIBS *= libpq.lib
#        }
        LIBS    *= -lws2_32 -ladvapi32 -lpq
        INCLUDEPATH += "C:\Programme\PostgreSQL\8.0\include"
        LIBS += -L"C:\Programme\PostgreSQL\8.0\lib"
#	win32-msvc: {
#		LIBS *= delayimp.lib
#		QMAKE_LFLAGS += /DELAYLOAD:libpq.dll
#	}
#	win32-borland: {
#		QMAKE_LFLAGS += /dlibpq.dll
#	}
}

include(../qsqldriverbase.pri)
Die Verbindung zum Datenbank-Server geht bei gleicher Fehlermeldung trotzdem nicht. Übrigens auch unter Linux nicht. Die Datenbank kann mit Qt3 problemlos angesprochen werden. Die Software (Tudo) wurde mit qt3to4 zuvor angepasst.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Schau mal nach, ob unter Linux auch alle abhängkeiten ok sind. ldd hilft dir dort weiter
joergb
Beiträge: 21
Registriert: 13. Juli 2005 13:11
Kontaktdaten:

Beitrag von joergb »

Sieht eigentlich gut aus:

Code: Alles auswählen

joerg@jbds2:~/dev/tudo_qt4/bin> ldd tudo
        linux-gate.so.1 =>  (0xffffe000)
        libpq.so.3 => /usr/lib/libpq.so.3 (0x40034000)
        libQt3Support.so.4 => /usr/local/Trolltech/Qt-4.0.0/lib/libQt3Support.so.4 (0x40050000)
        libQtGui.so.4 => /usr/local/Trolltech/Qt-4.0.0/lib/libQtGui.so.4 (0x40354000)
        libpng.so.3 => /usr/lib/libpng.so.3 (0x4086b000)
        libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40899000)
        libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x408a1000)
        libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x408ba000)
        libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x408c2000)
        libXrandr.so.2 => /usr/X11R6/lib/libXrandr.so.2 (0x408ca000)
        libXcursor.so.1 => /usr/X11R6/lib/libXcursor.so.1 (0x408ce000)
        libXinerama.so.1 => /usr/X11R6/lib/libXinerama.so.1 (0x408d7000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x408da000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x4094a000)
        libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40978000)
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40986000)
        libQtNetwork.so.4 => /usr/local/Trolltech/Qt-4.0.0/lib/libQtNetwork.so.4 (0x40a82000)
        libQtSql.so.4 => /usr/local/Trolltech/Qt-4.0.0/lib/libQtSql.so.4 (0x40acd000)
        libQtXml.so.4 => /usr/local/Trolltech/Qt-4.0.0/lib/libQtXml.so.4 (0x40b07000)
        libQtCore.so.4 => /usr/local/Trolltech/Qt-4.0.0/lib/libQtCore.so.4 (0x40b50000)
        libz.so.1 => /lib/libz.so.1 (0x40c92000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x40ca3000)
        libdl.so.2 => /lib/libdl.so.2 (0x40cb5000)
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x40cb9000)
        libm.so.6 => /lib/tls/libm.so.6 (0x40d77000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40d9b000)
        libc.so.6 => /lib/tls/libc.so.6 (0x40da3000)
        libssl.so.0.9.7 => /usr/lib/libssl.so.0.9.7 (0x40ebc000)
        libcrypto.so.0.9.7 => /usr/lib/libcrypto.so.0.9.7 (0x40eec000)
        libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x40fdf000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x41052000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x41085000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x41098000)
        libexpat.so.0 => /usr/lib/libexpat.so.0 (0x410ad000)
        /lib/ld-linux.so.2 (0x40000000)
        libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x410cd000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x410f0000)
        libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x410f3000)
joerg@jbds2:~/dev/tudo_qt4/bin>
Ich benutze normalerweise das Plugin von Qt.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

ichmeinte mehr das DB plgin
joergb
Beiträge: 21
Registriert: 13. Juli 2005 13:11
Kontaktdaten:

Beitrag von joergb »

Sieht auch nicht viel anders aus:

Code: Alles auswählen

joerg@jbds2:/usr/local/Trolltech/Qt-4.0.0/plugins/sqldrivers> ldd libqsqlpsql.so
        linux-gate.so.1 =>  (0xffffe000)
        libpq.so.3 => /usr/lib/libpq.so.3 (0x4002c000)
        libQtSql.so.4 => /usr/local/Trolltech/Qt-4.0.0/lib/libQtSql.so.4 (0x40048000)
        libQtCore.so.4 => /usr/local/Trolltech/Qt-4.0.0/lib/libQtCore.so.4 (0x40081000)
        libz.so.1 => /lib/libz.so.1 (0x401c3000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x401d4000)
        libdl.so.2 => /lib/libdl.so.2 (0x401e6000)
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x401eb000)
        libm.so.6 => /lib/tls/libm.so.6 (0x402a9000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x402cc000)
        libc.so.6 => /lib/tls/libc.so.6 (0x402d4000)
        libssl.so.0.9.7 => /usr/lib/libssl.so.0.9.7 (0x403ed000)
        libcrypto.so.0.9.7 => /usr/lib/libcrypto.so.0.9.7 (0x4041d000)
        libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x40511000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x40584000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x405b6000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x405c9000)
        /lib/ld-linux.so.2 (0x80000000)
        libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x405de000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x40602000)
        libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x40605000)
joerg@jbds2:/usr/local/Trolltech/Qt-4.0.0/plugins/sqldrivers>
Habe den Treiber auch mal direkt ins Programm eingebunden, gleiche Fehlermeldung "Driver not loaded". Das ganze wurde unter SuSE 9.3 getestet.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

was sagt echo $QTDIR?
joergb
Beiträge: 21
Registriert: 13. Juli 2005 13:11
Kontaktdaten:

Beitrag von joergb »

Normalerweise /usr/lib/qt3. Über kdevelop setze ich die Umgebungsvariable für das Programm aber auf /usr/local/Trolltech/Qt-4.0.0.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Kannst ja mal testweiste das Beispiel sqlbrowser aufrufen, dann solltest du sehen, welche Treiber QT sieht.
joergb
Beiträge: 21
Registriert: 13. Juli 2005 13:11
Kontaktdaten:

Beitrag von joergb »

Er zeigt mir QPSQL und QPSQL7 an. Habe das ganze auch mal unter Ubuntu 5.04 komplett ohne Qt3 getestet, um sicher zu gehen, das es kein Konflikt mit Qt3 oder SuSE ist. Hier läuft PostgreSQL 7.4. Die Fehlermeldung im XTerm war etwas aussagekräftiger "This version of PostgreSQL is not supported...". Halte ich aber für totalen Blödsinn. Mit 7.4 und 8.0 arbeite ich unter Qt3 problemlos. Werde als nächstes den Treiber mal unter die Lupe nehmen.
joergb
Beiträge: 21
Registriert: 13. Juli 2005 13:11
Kontaktdaten:

Beitrag von joergb »

Neue Erkenntnisse: Habe eines der Beispielprogramme (tablemodel) auf PostgreSQL unter SuSE 9.3 eingerichtet, indem ich connections.h modifiziert habe, und funktioniert. Ich vermute daher das Problem bei der Portierung von Qt3 nach Qt4 und dem Modul qt3support. Werde als nächstes versuchen aus dem Qt3-Projekt ein echtes Qt4-Programm zu machen, das wird wohl etwas dauern :(
joergb
Beiträge: 21
Registriert: 13. Juli 2005 13:11
Kontaktdaten:

Beitrag von joergb »

Problem gelöst:
So funktioniert es nicht:

Code: Alles auswählen

  QSqlDatabase db;
  db.addDatabase( "QPSQL" );
  db.setDatabaseName( "qttudo" );
  db.setUserName( "qttudo" );
  db.setHostName( "localhost" );
  db.setPort( 5432 );
und so geht es:

Code: Alles auswählen

  QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
  db.setDatabaseName( "qttudo" );
  db.setUserName( "qttudo" );
  db.setHostName( "localhost" );
  db.setPort( 5432 );
quser
Beiträge: 1
Registriert: 1. August 2005 17:16

Beitrag von quser »

Wie kann ich KDevelop unter Windows nutzen?javascript:emoticon(':lol:')
Antworten