Seite 1 von 1

Compilieren von Postgres Plugin schlägt fehl unter Vista

Verfasst: 4. Juli 2009 14:26
von Flashpixx
Ich versuche aktuell Qt 4.5.2 mit dem Postgres Plugin 8.4-rc2 unter Vista (32 Bit) zu kompilieren (analog unter Linux und OSX lief es problemlos).

Ich habe Postgres nach dieser Anleitung http://developer.postgresql.org/pgdocs/ ... libpq.html und auch testweise mit Cygwin kompiliert.
In die Umgebungsvariablen LIBS und INCLUDE die entsprechenden Pfade eingetragen, configure mit -plugin-sql-psql ausgeführt und wenn ich nun versuche mit nmake (VS Studio 9 bzw 2008) zu kompilieren, erhalte ich die Meldung:

Code: Alles auswählen

        link /LIBPATH:"c:\Library\Qt\4.5.2\lib" /LIBPATH:"c:\Library\Qt\4.5.2\li
b" /NOLOGO /DEBUG /DLL /MANIFEST /MANIFESTFILE:"tmp\obj\debug_shared\qsqlpsqld.i
ntermediate.manifest" /VERSION:4.52 /OUT:..\..\..\..\plugins\sqldrivers\qsqlpsql
d4.dll @C:\Users\ADMINI~1\AppData\Local\Temp\nm324D.tmp
   Bibliothek "..\..\..\..\plugins\sqldrivers\qsqlpsqld4.lib" und Objekt "..\..\
..\..\plugins\sqldrivers\qsqlpsqld4.exp" werden erstellt.
LINK : warning LNK4098: Standardbibliothek "MSVCRT" steht in Konflikt mit andere
n Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
libpq.lib(fe-connect.obj) : error LNK2019: Verweis auf nicht aufgelöstes externe
s Symbol "__imp__WSAGetLastError@0" in Funktion "_connectNoDelay".
libpq.lib(fe-misc.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp
__WSAGetLastError@0".
Gleiche Meldungen erscheinen wenn ich nach http://doc.trolltech.com/4.5/sql-driver ... -and-above versuche das Modul einzeln zu kompilieren

Wäre nett, wenn mir jemand bitte weiter helfen könnte?

Danke

Phil[/code]

Verfasst: 4. Juli 2009 14:34
von Christian81
WSAGetLastError ist in ws2_32.lib definiert. Also fehlt ein LIBS += ws2_32 im pro-File.

Verfasst: 4. Juli 2009 15:58
von Flashpixx
Christian81 hat geschrieben:[...] ist in ws2_32.lib definiert. Also fehlt ein LIBS += ws2_32 im pro-File.
In welche profile Datei?
Ich führe aktuell nur configure und nmake aus der Konsole aus

Danke

Phil

Verfasst: 4. Juli 2009 16:31
von Christian81
Die pro-Datei des Plugins welches nicht kompiliert würde ich mal sagen...

Verfasst: 4. Juli 2009 18:00
von Flashpixx
Nach der Doku müsste dann unter %QTDIR%\src\plugins\sqldrivers\psql
diese Datei liegen, tut sie aber nicht.
Habe das analog einmal für mySQL probiert, da kommt beim nmake dieser Fehler

Code: Alles auswählen

   Bibliothek "release\qsqlmysql.lib" und Objekt "release\qsqlmysql.exp" werden
erstellt.
LINK : fatal error LNK1104: Datei "release\qsqlmysql.lib" kann nicht geöffnet we
rden.
NMAKE : fatal error U1077: ""c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
\link.EXE"": Rückgabe-Code "0x450"
Stop.
NMAKE : fatal error U1077: ""c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
\nmake.exe"": Rückgabe-Code "0x2"
Ich habe in den Windows Umgebungsvariablen die LIB und INCLUDE entsprechend auf die Verzeichnisse wo die *.lib bzw *.dll (und *.h) Dateien liegen gesetzt, so dass nmake sie finden muss

Phil

Verfasst: 5. Juli 2009 11:40
von Flashpixx
Ich habe das ganze noch mal von vorne her installiert und Qt ohne Postgres kompiliert, dann läuft es ohne Probleme durch.

Ich habe configure mit folgenden Parametern

Code: Alles auswählen

configure -plugin-sql-odbc -plugin-sql-sqlite -plugin-sql-mysql -qt-zlib -qt-libpng -qt-libjpeg
aufgerufen und dann ein nmake gemacht. Die Libs zu MySQL habe ich einfach in die Umgebungsvariablen %INCLUDE% und %LIB% eingetragen

Phil

Verfasst: 5. Juli 2009 22:52
von Flashpixx
Ich habe nun das MakeFile gefunden

Code: Alles auswählen

C:\Library\Qt\4.5.2\src\plugins\sqldrivers\psql\Makefile.Debug
C:\Library\Qt\4.5.2\src\plugins\sqldrivers\psql\Makefile.Release
Dort sind folgende Einstellungen getroffen

Code: Alles auswählen

LINK          = link
LFLAGS        = /LIBPATH:"c:\Library\Qt\4.5.2\lib" /LIBPATH:"c:\Library\Qt\4.5.2\lib" /NOLOGO /DEBUG /DLL /MANIFEST /MANIFESTFILE:"tmp\obj\debug_shared\qsqlpsqld.intermediate.manifest" /VERSION:4.52
LIBS          = libpq.lib ws2_32.lib advapi32.lib c:\Library\Qt\4.5.2\lib\QtSqld4.lib c:\Library\Qt\4.5.2\lib\QtCored4.lib tmp\obj\debug_shared\qsqlpsqld_resource.res
Wenn ich nun bei den LFLAGS ein /NODEFAULTLIB:"ws2_32.lib" eintrage sehe ich diesen zwar bei der Ausführung "nmake" dieses Parameter, aber es zeigt keine Wirkung

Danke für die Hilfe

Phil [/code]

Verfasst: 5. Juli 2009 23:32
von Christian81
Was soll das ganze? NODEFAULTLIB hat damit nichts zu tun und Makefiles muss man auch nicht editieren sondern die pro-Datei!!

Verfasst: 5. Juli 2009 23:51
von Flashpixx
Wenn ich den Vorschlag von Dir umsetze, d.h. in meine sql.pro den LIB Parameter hinzufüge, ist das Problem nicht behoben.

Die Libs liegen kompiliert im %LIB% Pfad, der über die Umgebungsvariablen zugänglich ist. Das Problem liegt wohl an dem Aufruf des Linkers, der durch die Makefiles die entsprechenden Parameter erhält.

Vielleicht könntest Du einen Vorschlag machen, der einen funktionsfähigen Durchlauf von nmake gewährleistet

Phil