首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用-std=gnu99编译Linux内核模块?

如何使用-std=gnu99编译Linux内核模块?
EN

Stack Overflow用户
提问于 2013-04-09 18:45:25
回答 2查看 7.9K关注 0票数 11

最近,我已经学习了如何编写简单的字符驱动程序,并且在处理代码时,我注意到我收到了许多针对C99代码的GCC警告:

代码语言:javascript
复制
warning: ISO C90 forbids mixed declarations and code

我认为这是因为主Linux内核Makefile被设置为使用非C99标准编译。我搜索了一下,我在stackoverflow上找到了这个答案:How to use make and compile as C99?

因此,我自然地在我的Makefile中尝试了以下几点:

代码语言:javascript
复制
ccflags-y := -std=gnu99

不幸的是,这并没有压制GCC的警告。我检查了make的详细输出,并证实GCC确实是在-std=gnu99的末尾被执行的;所以我有点困惑。

如何使用-std=gnu99选项正确编译Linux内核模块?

编辑

我注意到GCC的输出显示了以下选项:-Wdeclaration-after-statement。这就是为什么即使使用-std=gnu99选项也会收到警告的原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-09 20:38:41

事实证明,-std=gnu99实际上是有效的;在删除编译器标志之后,我开始看到有关C99特性的错误。因此,这意味着除了-std=选项之外,还有其他原因导致警告被打印出来。

在通过make V=1对冗长的输出进行解析之后,我发现-Wdeclaration-after-statement选项是GCC执行的一部分。这就是我看到的ISO C90混合声明警告的原因。

若要禁用C90警告,请将其传递给GCC:-Wno-declaration-after-statement

例如:

代码语言:javascript
复制
ccflags-y := -std=gnu99 -Wno-declaration-after-statement
票数 20
EN

Stack Overflow用户

发布于 2014-09-26 21:29:53

还可以在Makefile中指定标志,如果您有一个:

代码语言:javascript
复制
FLAGS=-std=gnu99
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15910064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档