[MinGW] Wieso braucht eine Konsole eine 100kB DLL?
-
Frolo schrieb:
EDIT2: Funktioniert mit -static-libstdc++ -static-libgcc, aber jetzt ist die exe 650kB groß... wieso das denn?
Nur? Bei Linux schießt er die Größe dann gleich auf 1M hoch.
Tja, der Krempel um cout dürfte was kosten.
-
Naja hatte mich gefreut mal mit kleinen Exen zu arbeiten. Wenn ich selbiges mit dem C++ Builder XE3 compiler, dann ist die Exe 68kB groß, und benötigt auch keine DLLs
-
Frolo schrieb:
Naja hatte mich gefreut mal mit kleinen Exen zu arbeiten. Wenn ich selbiges mit dem C++ Builder XE3 compiler, dann ist die Exe 68kB groß, und benötigt auch keine DLLs
Keine, die nicht eh auf dem System rumliegen.
-
Frolo schrieb:
Naja hatte mich gefreut mal mit kleinen Exen zu arbeiten. Wenn ich selbiges mit dem C++ Builder XE3 compiler, dann ist die Exe 68kB groß, und benötigt auch keine DLLs
Richtig, Borland/Codegear/Embarcadero braucht keine DLLs. Die haben nämlich ein eigenes Bibliothekformat namens BPL. Findest du in Systemverzeichnissen. Zuhauf. Übersetz´ dein Programm mal ohne dynamische Runtime und Packages und guck, wie groß das Executable wird.
-
Überhaupt sind die Borland Compiler schon immer die besten auf ihrem Gebiet gewesen. Ohne Delphi würde ich heute nicht mehr auskommen, alles andere ist doch Spielkram dagegen. Durch die vielen Verkäufe kommt auch immer frischer Wind in den Laden, da fährt sich nix fest, so wie bei anderen Größen auf dem Markt.
-
Wenn ich mein Programm mit dynamischer Runtime und Packages compiler ist es 7kB groß. Ohne eben die 68kB
-
Embarcadero Lobbyist schrieb:
Überhaupt sind die Borland Compiler schon immer die besten auf ihrem Gebiet gewesen. Ohne Delphi würde ich heute nicht mehr auskommen, alles andere ist doch Spielkram dagegen. Durch die vielen Verkäufe kommt auch immer frischer Wind in den Laden, da fährt sich nix fest, so wie bei anderen Größen auf dem Markt.
Edit:
Ach, was soll´s?
- Die Borland Compiler sind sogar so gut, dass sie wegen mangelnder Standardkonformität nicht mehr von boost unterstützt werden.
- Ich kann meine Projekte nicht mehr im Debug Modus übersetzen, weil der Linker lapidar mit "Out of memory error" aussteigt. Dieser Fehler ist seit über 7 Jahren bekannt und wurde bis heute nicht gefixt. Stattdessen wird das Ding mit neuen Features überladen.
- XE5 benutzt für 32 und 64 Bit das LLVM Backend. Warum, wenn das eigene doch so gut ist?
- es nur wenige Patches für aktuelle RAD Studio Versionen, stattdessen erscheint jedes zweite Jahr eine neue Version, die man dann kaufen darf. Für Besitzer alter Versionen gibt´s natürlich Rabatt, aber es kostet trotzdem.Sorry für´s Thread Hijacking.
-
Kann GCC/MinGW "function level linking"?
Falls ja, dann mal den entsprechenden Compiler-/Linker-Switch setzen und rebuild-all machen.Sonst kann natürlich noch sein dass die MinGW Runtime viel mehr innere Abhängigkeiten hat als die vom XE3. Und/oder dass MinGW viel mehr Dinge standardkonform implementiert als XE3, und daher mehr Code braucht (ich denke da z.B. an locales etc.).
Die C++ iostreams ist halt nicht ganz klein, da überraschen mit ein paar hunder KB überhaupt nicht.Wenn du kleinere .EXEn willst dann nimm
printf. Oder noch besser:puts.
-
ich würde bei der WinApi nicht mit dem Mingw arbeiten, zu buggy und zu Windowsfremd, das ist nicht anfängerfreundlich. Nimm den Windows (VS-Express) Compiler oder Open Watcom. Wenn du mit kleinen Exen arbeiten willst, dann solltest du auch Assembler können.
-
Ich habe QTCreator. mache als custom build step SFML_STATIC und -static-libstdc++
, kommt beides mal "bla" exited with code -1, wieso schlägt das fehl?
-
Ist es nicht so, dass MinGW die ganzen Posix Schnittstellen selber mitbringt weil Windows die nicht hat, der GNU-Kram diese aber benötigt? Das macht den code sicherlich größer als bei nativen Compilern.
-
Ich wüsste nix davon dass MinGW besonders viele POSIX APIs anbietet die nicht jeder normale C Compiler für Windows auch hat (inklusive MSVC).
Und es würde auch nicht erklären wieso ne statisch gelinkte .exe dadurch grösser wird. Oder sagen wir so: es wäre kein Grund warum die .exe grösser sein muss.
Selbst wenn da 1 Mio. zusätzliche APIs mitkommen - so lange man die nicht aufruft, müssen die auch nicht zwingend mitgelinkt werden.
-
-Osize
-
hustbaer schrieb:
Ich wüsste nix davon dass MinGW besonders viele POSIX APIs anbietet die nicht jeder normale C Compiler für Windows auch hat (inklusive MSVC).
Und es würde auch nicht erklären wieso ne statisch gelinkte .exe dadurch grösser wird. Oder sagen wir so: es wäre kein Grund warum die .exe grösser sein muss.
Selbst wenn da 1 Mio. zusätzliche APIs mitkommen - so lange man die nicht aufruft, müssen die auch nicht zwingend mitgelinkt werden.Wenn man sich mal Cygwin (Aus dem MinGW hervorgegangen ist) anschaut ist es ja so, dass dieses eine große Kompatibilitätsschicht in Form einer DLL mitbringt, die alle damit kompilierten Programme benötigen. Die muss ja bei MinGW zumindest in Teilen in die exe eingebunden werden.