staging.inyokaproject.org

g++ : Datei (Output) soll möglichst klein sein

Status: Ungelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

Treue_Seele

Anmeldungsdatum:
6. März 2023

Beiträge: 146

Ich habe ein Problem mit meiner g++ Compileroption

mein c++ Quelltext

#include <iostream>

int main()
{
    std::cout << "Hello World\n";
}

Das hat ich im terminal eingegeben>

g++ -g -Wall -Wextra -pedantic-errors '/home/internet/Schreibtisch/q/Hello World/Hello.cpp'  -o foo 

ich möchte aber optimieren auf kleinen output das heisst die datei foo soll möglichst klein sein. Welcher compilerbefehl also (g++ -g ...) verkleinert den Output?

Thomas_Do Team-Icon

Moderator
Avatar von Thomas_Do

Anmeldungsdatum:
24. November 2009

Beiträge: 8162

man g++

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 3425

Nur g++: 16376
g++ -Os: 16328
-Os -ffunction-sections -fdata-sections -Wl,--gc-sections: 16224
nach strip -s -R .comment -R .gnu.version a.out: 14272
upx --ultra-brute a.out: 5140

Die verwendete Compilerversion kann auch Einfluss auf die Dateigröße haben. upx hat nix mit g++ zu tun, hab ich früher zu Windows 95 Zeiten und Miniplatten und Disketten aber gemocht.

Neral

Anmeldungsdatum:
3. Oktober 2007

Beiträge: 229

[Inyoka entfernt den führenden Space der Aufzählung]

  • Debuginfo ausschalten (-g0)

  • Auf Größe optimieren (-Os, Clang kann auch -Oz, um noch mehr auf Größe zu optimieren)

  • RTTI und Exceptions ausschalten

  • Binary strippen

  • Mit LTO kompilieren

  • Templates durch Laufzeitpolymorphie ersetzen

Aber was willst du eigentlich erreichen? Klingt ein bisschen nach einem XY-Problem, weil die Größe eines Executables normalerweise relativ egal ist und die Features, die man mit den einigen der genannten Punkte kaputt macht, normalerweise sinnvoll sind.

Treue_Seele

(Themenstarter)

Anmeldungsdatum:
6. März 2023

Beiträge: 146

g++ -g '/home/kingkong/Schreibtisch/q/Hello World/Hello.cpp'  -Os 
/usr/bin/ld: input file 'a.out' is the same as output file
collect2: Fehler: ld gab 1 als Ende-Status zurück

ich bekomms es zwar kompiliert,aber die a.out ist immernoch ~15,x Kilobyte gross was kann ich machen damit die kleiner wird?

Thomas_Do Team-Icon

Moderator
Avatar von Thomas_Do

Anmeldungsdatum:
24. November 2009

Beiträge: 8162

Was Du da machst ist sinnfrei. So ein Compiler ist nicht dafür da, ein Hello-World-Miniprogramm möglichst klein zu machen. Versuch das an "richtigem" Code.

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

und hier passt ergänzend dazu sehr schön: premature optimization is the root of all evil.

Gruß, noisefloor

encbladexp Team-Icon

Ehemaliger
Avatar von encbladexp

Anmeldungsdatum:
16. Februar 2007

Beiträge: 17277

Ein C/C++ Binary hat immer eine gewisse Grundgröße, irgendwo muss ja die Information stecken welche Libraries gebraucht werden etc pp. Das kannst du dir mit z.B. ldd dateiname anzeigen lassen.

Folgendes Python Script ist nur leckere 45 Byte groß (die Antwort ist aber so sinnvoll wie deine Frage):

1
2
#!/usr/bin/env python3
print("Hello World")

Was ist dein Ziel? Gibt es ein Problem mit dem Speicherplatz? Reden wir von Embedded Software Entwicklung, oder hast du einfach die Erwartung das ein Hello World maximal 1kb sein darf?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

encbladexp schrieb:

Was ist dein Ziel? Gibt es ein Problem mit dem Speicherplatz? Reden wir von Embedded Software Entwicklung, oder hast du einfach die Erwartung das ein Hello World maximal 1kb sein darf?

Oder vielleicht eine Programmierherausforderung?

encbladexp Team-Icon

Ehemaliger
Avatar von encbladexp

Anmeldungsdatum:
16. Februar 2007

Beiträge: 17277

Eventuell bekommt er das Binary mit strip noch kleiner, aber irgendwann ist halt Schluss. Oder er nimmt i386 statt amd64, könnte auch paar Bytes sparen. Noch mehr wenn er nicht die libc zum ausgeben nimmt, sondern dietlibc und konsorten.

Schmutzfink

Anmeldungsdatum:
29. Juni 2008

Beiträge: 88

Eventuell bekommt er das Binary mit strip noch kleiner,...

Wenn ich das richtig sehe, wird er damit nur die Information los, die er mit "-g" angefordert hatte. Eine Assemblerversion könnte da helfen, wobei ich jetzt aber nicht weiß, wie man da die Anbindung an das BS machen muss.

Aber vielleicht ist das auch nur ein KI-Bot, der uns testen will...

von.wert

Anmeldungsdatum:
23. Dezember 2020

Beiträge: 7756

Schmutzfink schrieb:

Aber vielleicht ist das auch nur ein KI-Bot, der uns testen will...

Bei Bot gehe ich noch mit. Aber gescriptet in der Art "Poste überallhin möglichst zusammenhangloses Zeug, antworte nicht und gehe schon gar nicht bis zur Lösung!".

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

Aber vielleicht ist das auch nur ein KI-Bot, der uns testen will...

Vielleicht ist es auch ein KI Bot, der hier noch lernen will, sicher abe dabei unglaublich dumm ungeschickt anstellt. Bei vielen Posts fehlt halt das I.

Gruß, noisefloor

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 3425

Auf mich wirkts so, dass sich ein Mensch für Linux, Anwendungen und Programmierung interessiert, da ergeben sich halt paar Fragen. Zu g++ hatte ich eine ähnliche, wie man die Ausführungsgeschwindigkeit von Anwendungen optimieren kann, hab nur halt nicht hier gefragt, sondern im Web recherchiert und selbst rumprobiert. Wenn man eh schon hier angemeldet ist, kommt mir das Fragen nach g++. Rosegarden, Linux-Distributionen usw. normal vor, jedenfalls nicht botartig.

Viele Leute haben halt nicht mehr die Faszination für neue Themengebiete und können sich da weniger gut reinversetzen, weshalb man lieber persönlich angegangen wird. Das sagt meiner Meinung nach mehr über die Leute aus, die sich aus den Threads auch einfach raushalten könnten, als über Treue_Seele, den neugierigen Menschen, der gerade vieles ausprobiert.

Antworten |