栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

最近在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/xxx
CURRENT_DIR := $(shell pwd)

obj-m := test.o
ccflags-y := -std=gnu99 -Wno-declaration-after-statement

kernel_module:
	$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules

.PHONY:clean

clean:	
	$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号