Sono abituato a utilizzare -std=c99
per abilitare le funzioni c99 durante la compilazione del codice dell'applicazione.Perché devo usare gnu99 invece di c99 per compilare un modulo del kernel?
Recentemente ho seguito alcuni esempi di moduli del kernel di base e ho aggiunto ccflags-y := -std=c99
al makefile. Tuttavia questo ha comportato errori di 17K righe quando ho provato a fare. gnu99
funziona perfettamente.
Qual è la differenza tra gnu99 e c99 su cui si basa il codice del kernel?
+1. E tu non sei il primo a notare. Vedi http://llvm.linuxfoundation.org/ – 0xC0000022L
Fondamentalmente, il kernel usa le estensioni GCC e non si compila quando sono disattivate. –
'Qual è la differenza tra gnu99 e c99 su cui si basa il codice del kernel?'. Penso che tu possa trovare queste differenze da solo. Questo è da gcc doc: 'GNU C fornisce diverse funzionalità linguistiche non presenti nello standard ISO C. (L'opzione -pedantic indica a GCC di stampare un messaggio di avviso se viene utilizzata una di queste funzionalità.)'. Quindi, compilare il kernel con 'gnu99' ma aggiungere' ccflags-y: = -pedantic'. E poi analizzare gli avvertimenti. Questo è dal doc di gcc: https://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Extensions.html#C-Extensions –