NGW100: riesieger Code mit C++

Persönliche Seite #853106
Lesenswert?

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.
OP #853141
Lesenswert?

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
#853291
Lesenswert?

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.
Gast #853426
Lesenswert?

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.
#855590
Lesenswert?

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.
#856328
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren