kann kompilierte .exe nicht auf einem anderen pc ausführen

Alles rund um die Programmierung mit Qt
Antworten
defenderLQ
Beiträge: 156
Registriert: 27. Juli 2006 20:53

kann kompilierte .exe nicht auf einem anderen pc ausführen

Beitrag von defenderLQ »

hi

ich habe ein .exe version von meiner anwendung erstellt aber es kann nicht
ausgeführt werden weil sich kein mingw10.dll befindet und noch andere .dll die es noch will....

dann habe ich in qt docs gelesen und habe in mein
.pro datei das hier rein gepackt:
CONFIG += qt
QT += network xml

hier ist meine volständige .pro:

Code: Alles auswählen

######################################################################
# Automatically generated by qmake (2.00a) Di 15. Aug 01:52:29 2006
######################################################################

TEMPLATE = app
TARGET += 
CONFIG += qt 
QT     += network xml
DEPENDPATH += . \
              config \
              gui \
              lang \
              release \
              util \
              gui\downinfo \
              gui\images \
              gui\Preferences \
              gui\searchresultinfo \
              gui\tray
INCLUDEPATH += .

# Input
HEADERS += rshare.h \
           config/rsharesettings.h \
           control/bandwidthevent.h\
           gui/ChatDialog.h \
           gui/ConnectionsDialog.h \
           gui/DownloadsDialog.h \
           gui/mainpage.h \
           gui/mainpagestack.h \
           gui/MainWindow.h \
           gui/PeersDialog.h \
           gui/SearchDialog.h \
           gui/SharedFilesDialog.h \
           gui/UploadsDialog.h \
           gui/StatisticDialog.h\
           gui/graphframe.h\
           gui/linetypes.h\
           lang/languagesupport.h \
           util/process.h \
           util/registry.h \
           util/string.h \
           util/win32.h \
           gui/downinfo/CommentsDialog.h \
           gui/downinfo/DownInfoWindow.h \
           gui/downinfo/FilenamesDialog.h \
           gui/downinfo/InformationsDialog.h \
           gui/downinfo/MetadataDialog.h \
           gui/downinfo/SourcesDialog.h \
           gui/images/rshare_win.rc.h \
           gui/Preferences/configpage.h \
           gui/Preferences/configpagestack.h \
           gui/Preferences/CryptographyDialog.h \
           gui/Preferences/DirectoriesDialog.h \
           gui/Preferences/LogDialog.h \
           gui/Preferences/PreferencesDialog.h \
           gui/Preferences/PreferencesWindow.h \
           gui/Preferences/WebcachesDialog.h \
           gui/searchresultinfo/SearchResultWindow.h \
           gui/searchresultinfo/SRCommentsDialog.h \
           gui/searchresultinfo/SRFilenamesDialog.h \
           gui/searchresultinfo/SRInformationsDialog.h \
           gui/searchresultinfo/SRMetadataDialog.h \
           gui/searchresultinfo/SRSourcesDialog.h \
           gui/tray/trayicon.h \
           gui/tray/trayicon_mac.h \
           gui/tray/trayicon_win.h \
           gui/tray/trayicon_x11.h
FORMS += gui/ChatDialog.ui \
         gui/ConnectionsDialog.ui \
         gui/DownloadsDialog.ui \
         gui/MainWindow.ui \
         gui/PeersDialog.ui \
         gui/SearchDialog.ui \
         gui/SharedFilesDialog.ui \
         gui/UploadsDialog.ui \
	   gui/StatisticDialog.ui\
         gui/downinfo/CommentsDialog.ui \
         gui/downinfo/DownInfoWindow.ui \
         gui/downinfo/FilenamesDialog.ui \
         gui/downinfo/InformationsDialog.ui \
         gui/downinfo/MetadataDialog.ui \
         gui/downinfo/SourcesDialog.ui \
         gui/Preferences/CryptographyDialog.ui \
         gui/Preferences/DirectoriesDialog.ui \
         gui/Preferences/LogDialog.ui \
         gui/Preferences/PreferencesDialog.ui \
         gui/Preferences/PreferencesWindow.ui \
         gui/Preferences/WebcachesDialog.ui \
         gui/searchresultinfo/SearchResultWindow.ui \
         gui/searchresultinfo/SRCommentsDialog.ui \
         gui/searchresultinfo/SRFilenamesDialog.ui \
         gui/searchresultinfo/SRInformationsDialog.ui \
         gui/searchresultinfo/SRMetadataDialog.ui \
         gui/searchresultinfo/SRSourcesDialog.ui
SOURCES += main.cpp\ 
           rshare.cpp\
           config/rsharesettings.cpp \
           gui/ChatDialog.cpp \
           gui/ConnectionsDialog.cpp \
           gui/DownloadsDialog.cpp \
           gui/mainpagestack.cpp \
           gui/MainWindow.cpp \
           gui/PeersDialog.cpp \
           gui/SearchDialog.cpp \
           gui/SharedFilesDialog.cpp \
           gui/UploadsDialog.cpp \
           gui/StatisticDialog.cpp\
           gui/graphframe.cpp\
           lang/languagesupport.cpp \
           util/process.cpp \
           util/registry.cpp \
           util/string.cpp \
           util/win32.cpp \
           gui/downinfo/CommentsDialog.cpp \
           gui/downinfo/DownInfoWindow.cpp \
           gui/downinfo/FilenamesDialog.cpp \
           gui/downinfo/InformationsDialog.cpp \
           gui/downinfo/MetadataDialog.cpp \
           gui/downinfo/SourcesDialog.cpp \
           gui/Preferences/configpagestack.cpp \
           gui/Preferences/CryptographyDialog.cpp \
           gui/Preferences/DirectoriesDialog.cpp \
           gui/Preferences/LogDialog.cpp \
           gui/Preferences/PreferencesDialog.cpp \
           gui/Preferences/PreferencesWindow.cpp \
           gui/Preferences/WebcachesDialog.cpp \
           gui/searchresultinfo/SearchResultWindow.cpp \
           gui/searchresultinfo/SRCommentsDialog.cpp \
           gui/searchresultinfo/SRFilenamesDialog.cpp \
           gui/searchresultinfo/SRInformationsDialog.cpp \
           gui/searchresultinfo/SRMetadataDialog.cpp \
           gui/searchresultinfo/SRSourcesDialog.cpp \
           gui/tray/trayicon.cpp 
RESOURCES += gui/images.qrc lang/lang.qrc
TRANSLATIONS += lang/rshare_de.ts lang/rshare_en.ts

macx {
  SOURCES += gui/tray/trayicon_mac.cpp
  HEADERS += gui/tray/trayicon_mac.h
}
unix {
  SOURCES += gui/tray/trayicon_x11.cpp
  HEADERS += gui/tray/trayicon_x11.h
}
win32 {
  SOURCES += gui/tray/trayicon_win.cpp
  HEADERS += gui/tray/trayicon_win.h
}
RC_FILE = gui/images/rshare_win.rc
es lässt sich trotzdem nicht ausführen auf einem system das kein qt 4.1/mingw installiert ist...
will immer noch .dlls haben...
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag von Einmaliger »

Wie du schon gesehen hast, musst du zusätzlich zur EXE die mingw10.dll weitergeben (das gilt für alle Programme, die du mit MinGW kompilierst), sowie die entsprechenden Qt-DLLs. Wenn du als Debug-Version kompiliert hast, zumindest "QtCore4d.dll" und (wenn du GUI-Komponenten verwendest) "QtGui4d.dll". Wenn du als Release-Version kompilierst, dieselben Dateien ohne das 'd' am Ende.
defenderLQ
Beiträge: 156
Registriert: 27. Juli 2006 20:53

Beitrag von defenderLQ »

das so wie ich es verstanden habe?

Code: Alles auswählen

win32 {
  SOURCES += gui/tray/trayicon_win.cpp
  HEADERS += gui/tray/trayicon_win.h
  RC_FILE = gui/images/rshare_win.rc
  LIBS += mingw10.dll QtCore4.dll QtGui4.dll
          
         
}
Mister_Crac
Beiträge: 28
Registriert: 10. August 2006 12:17

Beitrag von Mister_Crac »

Gibt es nicht eine Möglichkeit, die .dll mit einzukompilieren? Oder muss es zwingend eine separate Datei sein?
defenderLQ
Beiträge: 156
Registriert: 27. Juli 2006 20:53

Beitrag von defenderLQ »

ok so klappt es nicht!

es geht Trotzdem nicht habe extra die .dll dateien in mein .src reingetan...
aber mein .exe will auf anderem system trozdem die .dlls...
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag von Einmaliger »

DLLs kann man nicht so einfach "einkompilieren". Nimm doch einfach die EXE und die benötigten DLLs, kopiere alle in ein Verzeichnis ... fertig.
defenderLQ
Beiträge: 156
Registriert: 27. Juli 2006 20:53

Beitrag von defenderLQ »

als die .dlls werden nicht kleiner?

QtGui4.dll hat 5.51MB
und
QtCore4.dll hat 2.06 MB

das ist meine anwendung mindestens 7.57MB ohne meine anwendung?!

wozu braucht man die Qt core? reicht nur das Qtgui?
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag von Einmaliger »

defenderLQ hat geschrieben:wozu braucht man die Qt core? reicht nur das Qtgui?
Da sind so Sachen wie QString drin. Ohne das geht es nicht.

7 MB find ich gar nicht mal soviel, dafür, was in Qt alles an Funktionalität drinsteckt. Du brauchst die DLLs ja auch nur einmal pro Rechner, selbst wenn du mehrere Qt-Anwendungen hast.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

defenderLQ hat geschrieben:als die .dlls werden nicht kleiner?
Du kannst natürlich versuchen Qt nur mit dem zu compilieren was Du brauchst :-D

Nee, im Ernst, wenn Du es kleiner haben willst, dann compilier Qt statisch und bilde deine App statisch. Unter 2MB kommst Du dann aber nur mit UPX. Ausserdem ist davon abzuraten, da es zu unvorhersehbaren Wechselwirkungen mit anderen Qt-Applikationen kommen kann.
defenderLQ
Beiträge: 156
Registriert: 27. Juli 2006 20:53

Beitrag von defenderLQ »

und unter linux müssen die .dlls auch miteingepackt werden?

ok da müsste ich eben ein .rpm oder ein .deb paket machen und die 3 .dlls auch reintun?
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag von Einmaliger »

defenderLQ hat geschrieben:und unter linux müssen die .dlls auch miteingepackt werden?

ok da müsste ich eben ein .rpm oder ein .deb paket machen und die 3 .dlls auch reintun?
Unter Linux sind es .so-Dateien, aber die würdest du in dem Fall nicht mitgeben. Du würdest in dein deb, rpm, ebuild oder sonstwas reinschreiben, dass Qt4 benötigt wird, und die Package-Manager würden, sofern auf dem Zielsystem noch keine Qt4-Libraries vorhanden sind, diese irgendwo runterladen und in zentrale Verzeichnisse installieren.

Ähnliches könntest du auch unter Windows machen. Nur gibt es da leider keine zentrale Instanz, die sich um sowas kümmert. (Und das sage ich jetzt völlig wertfrei - sonst würde ich schreiben: Windows ist da einige Jahrzehnte im Rückstand. :D ) Vergleiche das doch mal mit DirectX. Wenn ein Programm DirectX benutzt, werden die DirectX-Libraries entweder mit auf die CD-ROM gepackt, oder das Installationsprogramm sorgt dafür, dass der Benutzer sich die DirectX-DLLs selbst runterlädt.

Wegen der vergleichsweise geringen Größe lohnt sich der Aufwand bei Qt aber nicht.

Wie macman geschrieben hat, kannst du die Qt-Libs alternativ statisch bauen. Dann werden sie tatsächlich direkt in deine EXE reingelinkt. Würde ich aber von abraten, denn wie gesagt: Die zwei DLLs stören nicht, und wenn der Benutzer Qt4 schon installiert hat, braucht er die nichtmal.
Antworten