uClibc++ vs. GNU libstdc++

Suchiman

Mitglied
Mitglied seit
8 Apr 2011
Beiträge
320
Punkte für Reaktionen
0
Punkte
0
Da ja mit dem Trunk 7148 die Möglichkeit gekommen ist libstdc++ als Standard c++ implementation zu nutzen wollte ich hier mal eine Diskussionsrunde starten was denn die Vorteile und Nachteile der beiden C++ implementationen sind. Da so viele Änderungen ja am Build System erfolgt sind habe ich beschlossen nochmal von einem frischen Checkout anzufangen. Daher die Frage, Vorteile und Nachteile und besonders Auswirkungen für Freetz, den AVM part und den normalen Freetz packeten wie z.b. lighttpd, Dropbear etc.
 
Fangen wir mal mit dem einfachen Teil an:
Die AVM-Programme, und alle anderen Programme, die kein C++ verwenden, sind davon nicht betroffen.
 
Sowas geht z.B. nur mit der libstdc++, die libuClibc++ ignoriert die Formatangaben:

Code:
std::cout << std::setfill('0')
             << std::setw(2) << calenderTime.tm_hour << ":"
             << std::setw(2) << calenderTime.tm_min << ":"
             << std::setw(2) << calenderTime.tm_sec;
 
Auswirkungen für den AVM part
gar keine, was höhere Programmiersprachen anbetrifft, so verwendet AVM ausschließlich C (man beachte, C ist nicht gleich C++)

wie z.b. lighttpd, Dropbear etc.
gar keine, die von Dir aufgelisteten Pakete sind in C geschrieben. Damit es irgendwelche Auswirkungen gibt, muss in der .mk-Datei des Pakets die Zeile $(PKG)_DEPENDS_ON := $(STDCXXLIB) auftauchen.

Daher die Frage, Vorteile und Nachteile
Code:
make menuconfig
-> Advanced options/Toolchain options/Standard C++ Library
-> Hilfe für beide Auswahlmöglichkeiten lesen
den entsprechenden Eintrag in CHANGELOG nachlesen
Kurz zusammengefasst, verwende weiterhin uClibc++, sie ist kleiner, braucht weniger Platz im Image und im Speicher zur Laufzeit. Die beiden Pakete, die libstdc++ (eventuell) brauchen (wenn wir die Probleme mit der uClibc++ nicht lösen), sind nmap-5.x und truecrypt und sind noch nicht eingecheckt.
 
okay soweit so gut und verstanden aber wofür ist dann diese "Auswahlmöglichkeit" in dem Toolchain part wenn sich die Packete sich doch selbst die implementation aussuchen? (Zumindest wenn ich das mit Depends on richtig verstanden habe)
 
Da hast Du was missverstanden. Früher hat jedes C++-Paket direkt gesagt, ich hänge von uClibc++ ab ($(PKG)_DEPENDS_ON := uclibcxx in .mk) und direkt diese selektiert (select FREETZ_LIB_libuClibc__ in Config.in). Jetzt wird in dem DEPENDS_ON-Teil statt uclibcxx die Variable $(STDCXXLIB) verwendet, die je nachdem, was Du unter "Toolchain options" einstellst, entweder den Wert uclibcxx oder libstdcxx annimt. Im select-Teil ist es genauso, FREETZ_LIB_STDCXXLIB selektiert entweder FREETZ_LIB_libuClibc__ oder FREETZ_LIB_libstdc__ entsprechend Deiner Einstellung unter "Toolchain options".
 
Achso okay :)
 
... diese "Auswahlmöglichkeit" in dem Toolchain part ...
Die Auswahlmöglichkeit reicht nicht:
Code:
...
ccache: FATAL: Could not find compiler "mipsel-linux-uclibc-[COLOR="red"]g++-wrapper[/COLOR]" in PATH
...
 
Wann genau kommt die Fehlermeldung? Frischer Build oder svn up mit dem Trick aus r7148?
 
Hast Du nachdem Du schon was gebaut hast uClibc++ auf stdc++ umgestellt oder war stdc++ von Anfang an eingestellt?
 
stdc++ war nicht von Anfang (d. h. sofort nach dem Auschecken) an, eingestellt. Ich hatte mit uClibc++, nmap gebaut, aber dann "make nmap-dirclean" gemacht und ein neues Paket für nmap (andere Version) erstellt.
 
r7162 behebt für mich das Problem
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.