Seite 1 von 1

Qt4,WinXP und PostgreSQL-Plugin

Verfasst: 13. Juli 2005 13:47
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.

Verfasst: 13. Juli 2005 17:11
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.

Linken funktioniert, Datenbank-Verb. noch nicht

Verfasst: 14. Juli 2005 13:14
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.

Verfasst: 14. Juli 2005 13:55
von BartSimpson
Schau mal nach, ob unter Linux auch alle abhängkeiten ok sind. ldd hilft dir dort weiter

Verfasst: 15. Juli 2005 14:22
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.

Verfasst: 15. Juli 2005 14:29
von BartSimpson
ichmeinte mehr das DB plgin

Verfasst: 15. Juli 2005 16:07
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.

Verfasst: 15. Juli 2005 16:19
von BartSimpson
was sagt echo $QTDIR?

Verfasst: 15. Juli 2005 16:49
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.

Verfasst: 15. Juli 2005 17:45
von BartSimpson
Kannst ja mal testweiste das Beispiel sqlbrowser aufrufen, dann solltest du sehen, welche Treiber QT sieht.

Verfasst: 16. Juli 2005 14:36
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.

Verfasst: 18. Juli 2005 09:10
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 :(

Verfasst: 18. Juli 2005 14:33
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 );

Verfasst: 1. August 2005 17:26
von quser
Wie kann ich KDevelop unter Windows nutzen?javascript:emoticon(':lol:')