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
Moderator
Anmeldungsdatum: 24. November 2009
Beiträge: 8162
|
|
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 strip pen 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
Moderator
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
Ehemaliger
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
Ehemaliger
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):
| #!/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
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
Ehemaliger
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
Ehemaliger
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.
|