Yagarto: Schließen Sie die Standard-Header-Dateien nicht ein

Ich verwende eine neu kompilierte Version der GCC-Toolchain für die ARM-Plattform namens Yagarto. Der Compiler wird mit einer „Standardbibliothek“ namens Newlib und „Standardheadern“ wie stdio.h.

printfFür mein Vorhaben ist die Lizenzierung von Newlib nicht geeignet, daher habe ich eine Funktion woanders verwendet . Das Problem ist, dass anscheinend die integrierten Header-Dateien implizit in jeder .c-Datei enthalten sind, und ich erhalte die folgende Fehlermeldung:

c:/yagarto4.6.0/lib/gcc/../../arm-none-eabi/sys-include/stdio.h:182:5: Fehler: widersprüchliche Typen für „printf“

Gibt es eine Möglichkeit, dass Yagarto die Standardbibliotheken nicht standardmäßig lädt?

Können Sie die ursprünglichen Standardbibliotheken einfach entfernen/umbenennen?

Antworten (1)

Aus der GCC-Manpage:

-nostdinc Durchsucht die Standard-Systemverzeichnisse nicht nach Header-Dateien. Es werden nur die Verzeichnisse durchsucht, die Sie mit den Optionen -I angegeben haben (und ggf. das Verzeichnis der aktuellen Datei).

-nostdinc++ Nicht nach Header-Dateien in den C++-spezifischen Standardverzeichnissen suchen, aber dennoch die anderen Standardverzeichnisse durchsuchen. (Diese Option wird beim Erstellen der C++-Bibliothek verwendet.)

Andere Optionen wären der explizite Verweis auf die Header-Dateien, die Sie einschließen möchten, und die Angabe ihres Verzeichnisses mit -I (das vor den Standard-Includes durchsucht wird). Oder Sie könnten einfach das Verzeichnis der inkompatibel lizenzierten Header aus der Installation entfernen (oder verschieben).

Sie können auch -nostdlib für den Linker verwenden.

Danke. Wissen Sie, ob es eine Möglichkeit gibt, nur den Header für zu ignorieren printf?
Wenn Sie versuchen, die Bibliothek zu vermeiden, warum möchten Sie die Header? Selbst wenn es nur um die technische Zuverlässigkeit geht, würde ich denken, dass Sie die Abhängigkeit von ihnen vollständig ausschließen möchten, zugunsten Ihrer eigenen mit Inhalten, die Sie leichter verfolgen können.