Debian hat für forky die newlib(-nano) durch die picolib ersetzt. Eine neue gcc-Version gibt es natürlich auch. Seitdem ist die stdint.h nicht mehr im gcc-Paket, obwohl z.B. stdarg.h noch dabei ist - irgendwie unlogisch. Man braucht also die picolib nur für stdint.h.
Ist das ein Versehen oder C23 oder?
Bisher bin ich sehr gut ohne newlib ausgekommen. So eine Abhängigkeit würde ich mir auch in Zukunft gerne sparen.
Du hast Recht, wenn man das Kleingedruckte zu diesem Unterforum ernst nimmt: "Programmierung abseits des Embedded-Bereichs". Aber "Compiler und IDE" gibt's nicht mehr :(
Mit -ffreestanding braucht man keine C-Standardlibrary. Das finde ich für kleine uC-Programme durchaus passend. Aber stdint.h sollte trotzdem dabei sein, gerade, weil in C23 noch mehr dazu gekommen ist. ISO/IEC 9899:2024 (en) — N3220 working draft sagt:
1
A conforming freestanding implementation shall accept any
2
strictly conforming program in which the use of the features
3
specified in the library clause (Clause 7) is confined to the
4
contents of the standard headers <float.h>, <iso646.h>,
freestanding als Gegensatz zu hosted braucht kein Betriebssystem, aber
sehr wohl eine (minimale) cstandardlib.
Ja, mindestens mit float.h über stdint.h bis stdnoreturn.h; natürlich mit den zugehörigen Funktionen. Das war alles beim gcc dabei. Manches wie z.B. stdarg braucht ja auch spezielle Unterstützung vom Compiler. Und jetzt fehlt in /usr/lib/gcc/arm-none-eabi/15/include/ genau eine Datei:
Das sind Standardlibrary-Header. gcc als reiner Compiler hat gar keine.
Warum die Debian-Maintainer die Pakete jetzt umsortiert haben, musst du die selber fragen.
Da stdint.h aber auch nur ein reiner Header ohne Binärcode dahinter ist, kopier den halt einfach ins passende Verzeichnis.
Wenn’s denn bug ist.
Die picolib ist ja nur optional, das gcc-Paket braucht ja ansonsten die normale libc6. Dafür wirds dann auch eine stdint.h geben. Die solltest du mal vergleichen, ob die identisch sind.
genau deswegen wollte ich sie weglassen. Aber die ist recommended, also schöner ist's schon, wenn ich sie installiere. Und es gibt "LDFLAGS += -nostdlib". Damit sollte die picolib beim Linken ignoriert werden. Das wäre optimal, gibt aber sehr spannende neue Fehler. Irgendwo ist noch ein neuer Schalter versteckt.
das gcc-Paket braucht ja ansonsten die
normale libc6. Dafür wirds dann auch eine stdint.h geben.
Die sind verschieden, alleine wegen 64-Bit vs 32-Bit und gcc 16 vs gcc 15.