Jestem przyzwyczajony do używania -std=c99
do włączania funkcji c99 podczas kompilowania kodu aplikacji.Dlaczego muszę używać gnu99 zamiast c99, aby skompilować moduł jądra?
Ostatnio śledziłem kilka podstawowych przykładów modułów jądra i dodałem ccflags-y := -std=c99
do pliku Makefile. Jednak to spowodowało 17K wierszy błędów, kiedy próbowałem zrobić. gnu99
działa idealnie.
Jaka jest różnica między gnu99 i c99, na których opiera się kod jądra?
+1. I nie jesteś pierwszy, który zauważy. Zobacz http://llvm.linuxfoundation.org/ – 0xC0000022L
Zasadniczo, jądro używa rozszerzeń GCC i nie kompiluje się, gdy są wyłączone. –
'Jaka jest różnica między gnu99 i c99, na których opiera się kod jądra?'. Myślę, że sam możesz znaleźć te różnice. Jest to z dokumentu gcc doc: 'GNU C udostępnia kilka funkcji językowych, których nie można znaleźć w normie ISO C. (Opcja -pedantic kieruje GCC, aby wydrukować komunikat ostrzegawczy, jeśli którakolwiek z tych funkcji jest używana.)'. Więc zbuduj jądro za pomocą 'gnu99', ale dodaj' ccflags-y: = -pedantic'. A następnie przeanalizuj ostrzeżenia. Jest to z dokumentu gcc: https://gc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Extensions.html#C-Extensions –