Reduzieren ausführbare windows-Datei-Größe
Ich habe ein C++/MFC-Anwendung, die auf windows - dynamisch verknüpfte es ist nur 60kb statisch, es ist > 3 MB.
Es ist ein Wesen verteilt, um Kunden per E-Mail und so muss möglichst klein sein.
Es statisch links die MFC und MSCVRT Bibliotheken - da ist eine Korrektur um einige Probleme und ich will nicht mehr support-Anrufe über fehlende libs - vor allem die sehr hilfreich "Anwendungskonfiguration falsch ist' ein!
Ist es eh zu Streifen, ein Windows-exe-Datei, die alle zusätzlichen MFC-Zeug, das ist die dll aber, dass ich nicht mit?
Oder sagen Sie es dynamisch zu verlinken MSVCRT (muss vorhanden sein), aber statisches linken der MFC-dll, die möglicherweise nicht werden?
Bearbeiten - danke, die haben es bis zu 1,6 Mb, die haben zu tun!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht mischen die CRT/MFC dlls. Geht aus dem Gedächtnis...
Als die anderen Antwort vorgeschlagen, Sie können #define WIN32_LEAN_AND_MEAN und VC_EXTRALEAN. Diese wird wahrscheinlich nicht helfen, wenn. Sie neigen dazu, über die Minimierung von Bauzeit - nicht die endgültige exe-Größe.
Kurzen Umbau MFC (Das ist eine option - man könnte es neu erstellen /Os, oder wenn Sie das Gefühl wirklich frech, /GL - doch dies wird wahrscheinlich führen zu mehr downstream-Spaß - hoffentlich ist es bereits gebaut /Gy).
OK. Einfache Dinge zu versuchen. Bauen Sie Ihre app /GL /Os /GF /Gy /GA. In der linker Sie mehr oder weniger wollen /OPT:REF " und " /OPT:ICF und /LTCG.
Muss ich sagen - ein release erstellen von 30k auf MB ist ein bisschen viel. Man könnte auch pass /Karte: dem linker und sehen, was alles mitzunehmen, was Raum - aber das ist sehr sehr tedius.
Es klingt fast so, MFC wurde nicht gebaut /Gy - aber das wäre überraschend.
Ich bin mir nicht sicher, wie die Leiste ausführbar, aber ein anderer Gedanke ist, zu komprimieren, zum Beispiel mit upx, die entpacken Sie es und führen Sie es an Ort und Stelle... Bedeutet das reduzieren der Größe genug für Sie?
Für Programme, die mit der CRT, können Sie die Technik in in diesem video von Pro Vognsen auf die Erreichung 3.5 KB ausführbaren Dateien.
Windows\System32\msvcrt.dll
Lieferumfang jedes Windows seit 95, also durch die Verknüpfung, dass Sie nicht brauchen, Paket Visual C++ Redistributable mit Ihrer app.Der grundlegende Prozess ist:
dumpbin
aufSystem32\msvcrt.dll
und die pipe in eine Dateiawk '{print $4}'
) zum erstellen einermsvcrt.def
Dateilib
aufmsvcrt.def
zu generierenmsvcrt.lib
/NODEFAULTLIB
auf dielink
Befehlszeile)/GS-
und entfernen Sie alle/RTC<x>
flags)Link gegen
kernel32.lib
undmsvcrt.lib
- und voilà, Ihr winzige ausführbare Datei hat keine Abhängigkeiten außer dem OS.(n.b.: Größe optimiert (
/O1
), geben Siememset
intrinsische detaillierte hier.)Können Sie versuchen, Dependency Walker zu überprüfen, welche DLLs, die Ihre statische EXE-Datei hängt sich auf, dann, wenn es von einer Bibliothek abhängig, die Sie sicher sind, es existiert auf Ihrem Rechner, können Sie kompilieren, ohne es und verringern Sie die Größe.