[gelöst] QDBus unter Windows ?

Alles rund um die Programmierung mit Qt
john
Beiträge: 110
Registriert: 14. August 2004 20:55
Wohnort: München

Beitrag von john »

ich konnte jetzt folgende Libs erstellen:

libdbus-1.a
libdbus-1.dll
libdbus-1.dll.a
libdbus-1d.a
libdbus-1d.dll
libdbus-1d.dll.a

Nun versuchte ich Qt4.3.0 einmal statisch und einmal dynamisch zu compilieren/linken, -jeweils als debug und release Version.

Bei der Shared-Version von Qt4.3.0 funktionierte es. Die Static-Version von Qt4.3.0 bricht unter /tools/qdbus/tools/qdbus ab.

Auszug:
mingw32-make[2]: Leaving directory `D:/Qt/4.3.0st/tools/qdbus/src'
cd tools\ && mingw32-make -f Makefile
mingw32-make[2]: Entering directory `D:/Qt/4.3.0st/tools/qdbus/tools'
cd qdbus\ && mingw32-make -f Makefile
mingw32-make[3]: Entering directory `D:/Qt/4.3.0st/tools/qdbus/tools/qdbus'
mingw32-make -f Makefile.Release
mingw32-make[4]: Entering directory `D:/Qt/4.3.0st/tools/qdbus/tools/qdbus'
g++ -c -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -DQT_THRE
AD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtXml" -I"..\..\..\..\in
clude\QtXml" -I"..\..\..\..\include" -I"..\..\..\..\include\QtDBus" -I"d:\Qt\openssl\include" -I"d:\Qt\dbus\include" -I"
tmp\moc\release_static" -I"..\..\..\..\include\ActiveQt" -I"." -I"..\..\..\..\mkspecs\win32-g++" -o tmp\obj\release_stat
ic\qdbus.o qdbus.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,console -Wl -o
"..\..\..\..\bin\qdbus.exe" tmp\obj\release_static\qdbus.o -L"d:\Qt\4.3.0st\lib" -L"d:\Qt\4.3.0st\lib" -lQtDBus -lnetap
i32 -ldbus-1 -LC:\Programme/dbus/lib -lQtXml -lQtCore -lQtCore4 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32
-lws2_32 -LD:\Qt\openssl\lib -LD:\Qt\dbus\lib
D:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lQtCore4
collect2: ld returned 1 exit status
mingw32-make[4]: *** [..\..\..\..\bin\qdbus.exe] Error 1
mingw32-make[4]: Leaving directory `D:/Qt/4.3.0st/tools/qdbus/tools/qdbus'
mingw32-make[3]: *** [release] Error 2
mingw32-make[3]: Leaving directory `D:/Qt/4.3.0st/tools/qdbus/tools/qdbus'
mingw32-make[2]: *** [sub-qdbus-make_default] Error 2
mingw32-make[2]: Leaving directory `D:/Qt/4.3.0st/tools/qdbus/tools'
mingw32-make[1]: *** [sub-tools-make_default-ordered] Error 2
mingw32-make[1]: Leaving directory `D:/Qt/4.3.0st/tools/qdbus'
mingw32-make: *** [sub-qdbus-make_default-ordered] Error 2
Die Fehlermeldung ist "D:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lQtCore4 "

Was fehlt nun? Der Compelier- und Linkvorgang unter D:/Qt/4.3.0st/src ist vollständig einwandfrei abgeschlossen worden. Jetzt unter D:/Qt/4.3.0st/tools fehlt ihm lQtCore4 ?
Ich habe auch keine lQtCore4 (unter der statischen Version von Qt) sondern nur lQtCore
lQtCore4 ist nur unter der Shared-Version vorhanden...?

Vielen Dank für jede Art von Hinweisen!

Grüße John

PS.: wie man erkennt, habe ich nicht so viel Ahnung von Libs und linken etc...

EDIT:
ich habe für die Static-Version von Qt auch DBUS statisch compiliert. -hat auch geklappt. Mich wundert halt nur, wer/was lQtCore4 (nicht lQtCore!) braucht?
john
Beiträge: 110
Registriert: 14. August 2004 20:55
Wohnort: München

Beitrag von john »

da ich irgendwie nicht weiterkomme und immer noch die mystische Abhängigkeit zur lQtCore4 (unter dem statischen win32 Build von Qt) besteht, habe ich folgende Libs selbst statisch compiliert / gelinkt:

libiconv-1.11
libxml2-2.6.29 und schließlich
windbus (svn r760)

somit müsste windbus nun "wirklich absolut statisch" sein. Selbst mit dieser Version bricht Qt4.3.1 während des Link-Vorgangs unter /tools ab. -da es ja keine LQtCore4 gibt....

Dann dachte ich mir: Ok, dann halt ohne windbus und wollte mir Qt nur mit openssl statisch linken. Dazu habe ich mir openssl-0.9.8e statisch übersetzt. Auch hier, brach Qt unter /tools ab. Weil wieder die lQtCore4 nicht existiert.

Ich gehe davon aus, dass dies ein Problem von Qt ist.... Falls irgendwer Qt unter Windows mit openssl oder windbus statisch übersetzt hat, lasst es mich bitte wissen!

Vielen Dank und viele Grüße, john


PS.: Achja, falls wer Qt4.3.x statisch übersetzt hat, dann würde es mich interessieren, ob die "lQtCore4" wirklich nicht vorhanden ist...
john
Beiträge: 110
Registriert: 14. August 2004 20:55
Wohnort: München

Beitrag von john »

Also, inzwischen ist das Problem gelöst. Es gibt tatsächlich Probleme mit dem aktuellen Build-System von Qt 4.3.1

Nach langen Suchen und viel probieren konnte ich einen Patch erstellen, der das Problem unter Windows zum statisch Linken löst. Ich habe diesen Patch hier mit angehängt, falls wer Interesse hat. Gegeben falls müsst Ihr eure Pfade im Patchfile anpassen. Auch kann es sein, dass dieser Patch mit neueren Versionen von Qt nicht mehr funktioniert. Aber zumindest erkennt Ihr, was und welche Dateien Ihr ändern müsst.

Bei mir läuft jetzt Qt4.3.1 mit QDbus und openssl unter Windows statisch gelinkt. -endlich :mrgreen:

Grüße johno


PS.: den Patch braucht man nur für die statisch gelinkte Version für Qt4.3.1 unter Windows. Zum dynamisch Linken braucht man den Patch nicht, sollte aber auch funktionieren. Ebenfalls sollte der Source von Qt dann immer noch unter Linux funktionieren, bin mir aber da nicht sicher, glaube aber, dass ich bei jeder Änderung die win32 Abfrage mit eingebaut habe...
Dateianhänge
Qt4.3.1Patchv2.rar
(1.1 KiB) 177-mal heruntergeladen
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Hier ein paar Hinweise:

src\network\network.pro
Das ist falsch - dafür gibt es -I und -L als configure - Optionen


assistant\lib\lib.pro
Warum im static mode QT_SHARED definiert sein soll weiss ich nicht - muss man mal untersuchen

qdbus\src\qdbusmacros.h & src.pro
Das ist wirklich ein Fehler, aber die Lösung ist nicht ganz korrekt. Muss mal mit tt deswegen reden
In src.pro die includepath-Anapssungen sind natürlich wieder falsch - siehe network.pro
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
john
Beiträge: 110
Registriert: 14. August 2004 20:55
Wohnort: München

Beitrag von john »

Hier ein paar Hinweise:

src\network\network.pro
Das ist falsch - dafür gibt es -I und -L als configure - Optionen
...
In src.pro die includepath-Anapssungen sind natürlich wieder falsch - siehe network.pro
Ja, dafür gibt es die -I und -L Option. Leider wirft mir diese Option das ganze Build-System durcheinander (dann kommt wieder die Abhängigkeit zur lQtCore4), weshalb ich eine andere Lösung suchen musste.
assistant\lib\lib.pro
Warum im static mode QT_SHARED definiert sein soll weiss ich nicht - muss man mal untersuchen
das weiß ich nicht sicher, habs nur vorsichtshalber eingeführt... -funktioniert möglicherweise auch ohne...
qdbus\src\qdbusmacros.h & src.pro
Das ist wirklich ein Fehler, aber die Lösung ist nicht ganz korrekt. Muss mal mit tt deswegen reden
Ok, danke fürs anschauen!

Gruß john
Antworten