DLL's beilegen?

Verschiedenes zu Qt
Antworten
devcube
Beiträge: 16
Registriert: 2. Januar 2009 16:28

DLL's beilegen?

Beitrag von devcube »

Hallo,

ich programmiere mit Eclipse + QtIntegration. Ich habe zum Funktionstest mal ein Testprogramm erstellt, was sich auch anstandslos kompilieren lässt. Beim Starten der Anwdung bekomme ich diverse Fehler über fehlende DLL's. Ich habe diese aus dem Qt-Bin Verzeichnis in den Ordner der .exe kopiert und dann hat es funktioniert.
Wie kann ich es anstellen, dass ich die DLL's nicht mehr dem Programm beizulegen habe? Ich möchte erreichen, dass alles nötige schon in der .exe drinsteht, diese keine zusätzlichen Datein mehr benötigt.

mfg devcube
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

du musst qt statisch kompilieren, dann werden deine programme gegen die statischen qt-libs gelinkt und alles noetige mit reingepackt.
mindestens eine ausfuehrliche anleitung dazu (fuer windows) gibts hier im forum.

mfg,
julian
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

also wenn es nur darum geht dass du die qt-dlls immr in den programmordner kopieren musst, dann kopier sie einfach nach C:\Windows\system32. ansonsten musst du statisch linken

Mfg androphinx
devcube
Beiträge: 16
Registriert: 2. Januar 2009 16:28

Beitrag von devcube »

Also mir geht es schon ums statische kompilieren/linken, nur bekomme ich das irgendwie nicht hin. hier im forum habe ich keinen passenden beitrag gefunden, mit dem ich das hinbekommen könnte und im internet auch nicht.
was ich bis jetzt gemacht habe:
1. http://www.nabble.com/Problem-compile-Q ... 92075.html befolgt (nur die sspi.h durch den code dort ersetzt)
2. http://wiki.qtcentre.org/index.php?titl ... on_Windows vollständig durchgemacht bzw. versucht. bei dem befehl mingw32-make sub-src
bekomme ich einen fehler:

Code: Alles auswählen

C:\Qt\4.4.3>mingw32-make sub-src
cd src/winmain/ && mingw32-make
mingw32-make[1]: Entering directory `C:/Qt/4.4.3/src/winmain'
mingw32-make -f Makefile.Debug all
mingw32-make[2]: Entering directory `C:/Qt/4.4.3/src/winmain'
g++ -c -g -Wall -frtti -fexceptions -mthreads -DQT_THREAD_SUPPORT -DUNICODE -DQT
_LARGEFILE_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNIN
GS -DQT3_SUPPORT -DQT_MOC_COMPAT -D_USE_MATH_DEFINES -I'../../include' -I'tmp' -
I'../../include/QtCore' -I'c:/Qt/4.4.3/include/qtmain' -I'tmp/rcc/debug_static'
-I'tmp' -I'c:/Qt/4.4.3/include/ActiveQt' -I'tmp/moc/debug_static' -I'.' -I'../..
/mkspecs/win32-g++' -o tmp/obj/debug_static/qtmain_win.o qtmain_win.cpp
In file included from ../../include/QtCore/qatomic_windows.h:1,
                 from ../../include/QtCore/../../src/corelib/arch/qatomic_arch.h
:72,
                 from ../../include/QtCore/qatomic_arch.h:1,
                 from ../../include/QtCore/../../src/corelib/thread/qbasicatomic
.h:203,
                 from ../../include/QtCore/qbasicatomic.h:1,
                 from ../../include/QtCore/../../src/corelib/thread/qatomic.h:42
,
                 from ../../include/QtCore/qatomic.h:1,
                 from ../../include/QtCore/../../src/corelib/tools/qbytearray.h:
42,
                 from ../../include/QtCore/qbytearray.h:1,
                 from qtmain_win.cpp:39:
../../include/QtCore/../../src/corelib/arch/qatomic_windows.h:387: error: declar
ation of C function `long int InterlockedCompareExchange(long int*, long int, lo
ng int)' conflicts with
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1663: error:
 previous declaration `LONG InterlockedCompareExchange(volatile LONG*, LONG, LON
G)' here
../../include/QtCore/../../src/corelib/arch/qatomic_windows.h:388: error: declar
ation of C function `long int InterlockedIncrement(long int*)' conflicts with
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1676: error:
 previous declaration `LONG InterlockedIncrement(volatile LONG*)' here
../../include/QtCore/../../src/corelib/arch/qatomic_windows.h:389: error: declar
ation of C function `long int InterlockedDecrement(long int*)' conflicts with
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1667: error:
 previous declaration `LONG InterlockedDecrement(volatile LONG*)' here
../../include/QtCore/../../src/corelib/arch/qatomic_windows.h:390: error: declar
ation of C function `long int InterlockedExchange(long int*, long int)' conflict
s with
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1668: error:
 previous declaration `LONG InterlockedExchange(volatile LONG*, LONG)' here
../../include/QtCore/../../src/corelib/arch/qatomic_windows.h:391: error: declar
ation of C function `long int InterlockedExchangeAdd(long int*, long int)' confl
icts with
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1672: error:
 previous declaration `LONG InterlockedExchangeAdd(volatile LONG*, LONG)' here
mingw32-make[2]: *** [tmp/obj/debug_static/qtmain_win.o] Error 1
mingw32-make[2]: Leaving directory `C:/Qt/4.4.3/src/winmain'
mingw32-make[1]: *** [debug-all] Error 2
mingw32-make[1]: Leaving directory `C:/Qt/4.4.3/src/winmain'
mingw32-make: *** [sub-winmain-sub_src_target_ordered] Error 2

C:\Qt\4.4.3>
3. Wenn ich ein Projekt nun kompilieren will bekomme ich auch eine fehlermeldung:

Code: Alles auswählen

C:\Dokumente und Einstellungen\ich\Eigene Dateien\Programmierung\Qt\hello>make
c:/Qt/4.4.3/bin/qmake.exe -win32 -o Makefile hello.pro
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Dokumente und Einstellungen/ich/Eigene D
ateien/Programmierung/Qt/hello'
g++ -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-ps
eudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug/hello.exe debug/hello.o
  -L'c:/Qt/4.4.3/lib' -lmingw32 -lqtmaind -lQtGuid -lgdi32 -lcomdlg32 -loleaut32
 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCored -lkernel32 -luser32 -lshell32 -l
uuid -lole32 -ladvapi32 -lws2_32
C:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot fin
d -lQtGuid
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug/hello.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Dokumente und Einstellungen/ich/Eigene Dateien/Programmierung/Qt/hello'
mingw32-make: *** [debug] Error 2

C:\Dokumente und Einstellungen\ich\Eigene Dateien\Programmierung\Qt\hello>
Vielleicht könnt ihr mir helfen, wäre jedenfalls schön.


mfg devcube
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

http://qtforum.de/forum/viewtopic.php?t ... 60ab36562c

das klappte fuer mich sehr gut (falls das noch aktuell ist ...).
sorry, im moment hab ich keine zeit mir die beiden anderen links durchzulesen, kannst ja mal das vorgehen vergleichen ...

mfg,
julian
devcube
Beiträge: 16
Registriert: 2. Januar 2009 16:28

Beitrag von devcube »

Den hab ich mir auch angesehen, aber ihn nicht durchgemacht. Ich entferne dann Qt und MinGW nochmal, und schau mal ob mir dein Link helfen kann.

Edit: Bis jetzt sieht es gut aus, bin schon weiter als sonst. Nur bei der Auswahl der Pakete hatte ich das Problem, dass eines nicht herunterladbar war. Dann habe ich einfach auf http://ftp.heanet.ie/disk1/sourceforge/m/mi/mingw/ gesucht und gefunden.
devcube
Beiträge: 16
Registriert: 2. Januar 2009 16:28

Beitrag von devcube »

Wenn ich MySQL nicht dabei haben möchte, kann ich den Aufruf von configure dann auf configure -static -release -no-exceptions -qt-gif -qt-libpng -qt-libjpeg -qt-libtiff -no-vcproj kürzen? Mit dem Aufruf im Tutorial gab es bei mir eben einen error bzgl. MySQL.
devcube
Beiträge: 16
Registriert: 2. Januar 2009 16:28

Beitrag von devcube »

Soooo, endlich hab ich das zeug kompiliert. Es funktioniert jetzt super.
Danke Freaky, dass du mir das empfohlen hast.

Einen Tipp hab ich noch: benutzt UPX, dann werden eure .exe sehr viel kleiner. Bei mir war eine nur noch 1/3 von der Originalgröße groß.
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

freut mich, dass es geklappt hat! :)
und danke fuer den upx-tipp, werd ich bei gelegenheit mal probieren ...

mfg,
julian
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

devcube hat geschrieben:Einen Tipp hab ich noch: benutzt UPX, dann werden eure .exe sehr viel kleiner. Bei mir war eine nur noch 1/3 von der Originalgröße groß.
Die werden aber auch nur auf der Platte kleiner. Dafür lassen sie sich kaum noch packen, da sie schon gepackt sind. Zu Zeiten von Disketten und ZIP-Laufwerken mag das noch eine Rolle gespielt haben, da weniger gelesen werden musste. Direkt von CD gestartet, gibt es vielleicht auch noch einen Vorteil, ansonsten ist es nur noch ein nettes Gimmick.

Ich nutze allerdings auch UPX, da viele meiner Programme direkt vom USB-Stick laufen. Und da viele Sticks eine miserable Leserate aufweisen, sehe ich auch da Vorteile :)
devcube
Beiträge: 16
Registriert: 2. Januar 2009 16:28

Beitrag von devcube »

macman hat geschrieben:... Die werden aber auch nur auf der Platte kleiner ...
Wieso? Werden mit UPX gepackte Dateien bei dir etwa wieder größer?
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

es wird ja bloß die datei in der das programm steht verkleinert. vom arbeitsspeicherverbrauch ist es genau die selbe Größe wie ungepackt, wenn ni sogar durch den Entpack-prozess mehr...

Mfg androphinx
Undefined
Beiträge: 34
Registriert: 19. Oktober 2006 17:12

Beitrag von Undefined »

androphinx hat geschrieben:also wenn es nur darum geht dass du die qt-dlls immr in den programmordner kopieren musst, dann kopier sie einfach nach C:\Windows\system32. ansonsten musst du statisch linken

Mfg androphinx
Kurz und schmerzlos NEIN !!!!
Du kannst shared Bibliotheken auch in dein Installation Verzeichnis packen. (Ich mache das immer so ;-) )
Dafür gibt es bei Windoo... die qt.conf die man auch mit Installations Programmen bearbeiten kann.

Code: Alles auswählen

[Paths]
Prefix = 
Plugins = 
Libs = 
Translations = 
Antworten