700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 出现使用选项-std=c99或-std=gnu99来编译您的代码错误或者如何让Linux内核编译驱动模

出现使用选项-std=c99或-std=gnu99来编译您的代码错误或者如何让Linux内核编译驱动模

时间:2021-06-23 15:18:04

相关推荐

出现使用选项-std=c99或-std=gnu99来编译您的代码错误或者如何让Linux内核编译驱动模

最近在Linux系统下编译嵌入式代码时出现问题:

问题如下图:

然后发现问题出在这:

use option -std=c99 or -std=gnu99 to compile your code

上面的意思是:使用选项-std=c99或-std=gnu99来编译您的代码

后来才知道:gcc 默认使用的是 C89 的标准,而 C89 的标准不支持在 for 中定义循环变量,而在 for 循环中需要定义循环变量的话,需要在 C99 标准中才支持,因此需要增加 -std=c99 或 -std=gun99 参数才能编译通过。

所以在嵌入式中使用的交叉编译器在编译时加上–std=c99选项可以支持c99

arm-linux-gnueabihf-gcc test.c -o test --std=c99

然后问题解决:

但是如果在你是在让内核编译驱动模块的时候,并没有使用上述语句的机会,不过我们可以在内核模块的Makefile文件中加入下面这句话让其支持c99

ccflags-y := -std=gnu99 -Wno-declaration-after-statement

内核模块Makefile示例如下(源文件test.c):

KERNEL_DIR := /home/xxx/xxxCURRENT_DIR := $(shell pwd)obj-m := test.occflags-y := -std=gnu99 -Wno-declaration-after-statementkernel_module:$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules.PHONY:cleanclean:$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean

出现使用选项-std=c99或-std=gnu99来编译您的代码错误或者如何让Linux内核编译驱动模块时支持C99

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。