Ich bin es gewohnt, -std=c99
zu verwenden, um c99 Features beim Kompilieren von Anwendungscode zu aktivieren.Warum muss ich gnu99 anstelle von c99 verwenden, um ein Kernelmodul zu kompilieren?
Vor kurzem habe ich folgenden einige grundlegende Kernel-Modul Beispiele gewesen, und ccflags-y := -std=c99
zum Make-Datei hinzugefügt. Dies führte jedoch zu 17K-Fehlerzeilen, wenn ich versuchte zu machen. gnu99
funktioniert perfekt.
Was ist der Unterschied zwischen gnu99 und c99, die Kernel-Code stützt sich auf?
+1. Und du bist nicht der Erste, der es bemerkt. Siehe http://llvm.linuxfoundation.org/ – 0xC0000022L
Grundsätzlich verwendet der Kernel GCC-Erweiterungen und kompiliert nicht, wenn sie ausgeschaltet sind. –
'Was ist der Unterschied zwischen gnu99 und c99, auf den sich der Kernel-Code stützt?'. Ich denke, Sie können diese Unterschiede selbst finden. Dies ist von gcc doc: 'GNU C bietet mehrere Sprachfunktionen, die nicht in ISO-Standard C gefunden wurden. (Die Option -pedantic weist GCC an, eine Warnmeldung zu drucken, wenn eines dieser Features verwendet wird.)'. Also, baue den Kernel mit 'gnu99', füge aber' ccflags-y: = -pedantic' hinzu. Und dann analysiere Warnungen. Dies ist von doc gcc: https://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Extensions.html#C-Extensions –