Hi, wenn ich ein einfaches Hello-World C++-Programm mit AVR32-Studio kompiliere und statisch linke wird die ausführbare Datei ca 2.8MB groß. Kann man sie auch irgendwie kleiner kriegen? MfG Mark
Was heißt für Dich in diesem Falle "statisch linken"? Wie soll ein Compiler für einen betriebssystemlosen Prozessor was anderes erzeugen können? Du wirst vermutlich mit etlichen für Deine Anwendung nicht benötigten Libraries linken (floating point-Unterstützung, vollständiges printf etc.) und in Deiner "ausführbaren Datei" (was soll das auf einem betriebssystemlosen Controller eigentlich sein?) dürften auch noch etliche Debuginformationen enthalten sein.
Sorry, hab vergessen zu erwähnen dass auf dem Board Linux läuft. >Du wirst vermutlich mit etlichen für Deine Anwendung nicht benötigten >Libraries linken Genau das ist ja das Problem, aber wie kriegt man die nicht verwendenten Teile raus? PS: Die libstdc++.so dynamisch einbinden mit insmod geht auch nicht, es kommt immer die Meldung "Segmentation Fault". MfG Mark
schreibst du ein Programm oder ein Kernel-Modul? Falls Kernel-Modul: - C++ ist im Linux-Kernel eher ungewöhnlich, lern lieber C dafür. - "Statisch gelinktes" Kernel-Modul ist für mich ein monolithischer Kernel, der deinen Teil mit enthält. Und evtl. noch initrd, rootfs, etc. da sind 2MB schon in Ordnung. Falls Programm: - "insmod" ist dafür da um Kernel-Module (Wie z.B. Gerätetreiber) zu laden. Mit dem dynamischen Linken hat das nix zu tun. - das Nachladen von der libstdc++ wird vom dynamischen Linker "ld.so" automatisch gemacht, da solltest du dich garnicht drum kümmern müssen, ausser vielleicht einmalig "ldconfig" ausführen, nachdem du die libsdtc++ installiert hast.
Ich schreibe ein Programm, kein Kernel-Modul. >- "insmod" ist dafür da um Kernel-Module (Wie z.B. Gerätetreiber) zu >laden. Mit dem dynamischen Linken hat das nix zu tun. Ok, dann hab ich da wohl etwas falsch verstanden. >- das Nachladen von der libstdc++ wird vom dynamischen Linker "ld.so" >automatisch gemacht, da solltest du dich garnicht drum kümmern müssen, >ausser vielleicht einmalig "ldconfig" ausführen, nachdem du die >libsdtc++ installiert hast. Wie genau kann man denn die libstdc++ installieren? Standartmäßig wird sie nämlich nicht geladen.
Im Linux vom NGW100 ist die libstdc++ nicht dabei. Siehe hier: http://www.avrfreaks.net/wiki/index.php/Documentation:NGW/CPPHelloWorld unter 'Linker Settings'.
Ja, das ist mir schon klar, aber wie kann man sie nachladen bzw selbst kompillieren? Platz im RAM ist ja genug.
C++ erzeugt halt riesige Binaries, beim statischem Linken sowieso. C benutzen und dann gegen dietlibc oder uClibc linken, die eigentlich eh schon irgendwo rumflacken sollten auf dem Teil(?). Statisches Linken sollte ferner nicht notwendig sein. Michael
Michael G. wrote:
> C++ erzeugt halt riesige Binaries,
Was erst mal zu beweisen wäre.
Gut, wenn man die I/O streams benutzt, bläht sich alles ein
wenig auf. Aber ansonsten sind C++ Binaries auch nicht größer
als vergleichbare C-Programme mit identischer Funktionalität.
Besonders bei letzterem beissen sich die Hunde, da wird nämlich
oft Äpfel mit Birnen verglichen. Die C++ Standardsachen machen
nämlich auch Fehlerprüfung (zb in dynamischen Arrays - vulgo vector)
welche C-Programmierer oft, mit den bekannten Nebeneffekten,
unter den Tisch fallen lassen.
Aber 2.8Mb ist schon heftig. Das kriegt noch nicht mal MS hin.
Und die haben in ihren EXE jede Menge Schrott mit drinn.
Mork wrote: > Ja, das ist mir schon klar, aber wie kann man sie nachladen bzw selbst > kompillieren? Platz im RAM ist ja genug. RAM ist hier nicht von Bedeutung. Hier siehst du die Speicheraufteilung des NGW100: http://www.avrfreaks.net/wiki/index.php/Documentation:NGW/NGW100_Memories Ganz unten bei 'Disk Space Layout'. In den beiden 8MByte flash Bausteinen ist einfach kein Platz für eine über 4 MByte große Bibliothek. Mit der Entwicklungsumgebung kannst du ja versuchen die libstdc++.so.6 zu übersetzen. Wenn du sie dann auf die SD Karte kopierst und den lib Suchpfad erweiterst, sollte es gehen. Oder du baust das gesammte Image neu und bootest von SD Karte oder tftp. Dann bist du nicht mehr auf die 16 MByte der flash chips begrenzt.
Hallo Frank, danke für den Hinweis! Wird denn die lib automatisch geladen, wenn sie auf der SD-Karte im lib-Ordner ist?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.