关于STM32头文件包含出现No such file or directory和 invalid redeclaration of type name...的问题

    用keil sdk编译STM32的程序时出现“.\inc\stm32f10x_conf.h(21): error:  #5: cannot open source input file "stm32f10x_type.h": No such file or directory”类似的问题,说明没有搜到此头文件,如果是用双引号 “  ” 包含的头文件,则问题肯定出在没有把此头文件放在工程文件夹内。

还有一个问题,已经把此头文件放在了工程文件夹内,但是编译时出现这个问题:.\inc\stm32f10x_type.h(28): error:  #256: invalid redeclaration of type name "s32" (declared at line487 of ".\inc\stm32f10x.h"),没有任何怀疑,错误提示已经明确地说s32这个名字已经在inc\stm32f10x.h的487行定义过,所以stm32f10x_type.h中对s32的定义属于重复定义,无效。

    那么为什么会出现重复定义呢? 通过双击该提示到stm32f10x_type.h定义s32的地方,以及到stm32f10x.h的第487行定义s32的地方,会发现果然有同样的定义,

如图所示:

           


这是不同的头文件,而且在stm32f10x.h这个头文件中会包含stm32f10x_type.h(如图,stm32f10x.h包含了另一个头文件stm32f10x_conf.h,而在stm32f10x_conf.h里面包含了stm32f10x_type.h,即相当于stm32f10x.h中包含stm32f10x_type.h——即①包含了②,②包含了③,那么①就包含了③,有点啰嗦,但会显得更清楚一些,呵呵),


为什么还会出现在这两个相关联的头文件中定义了同一个名字s32呢?

问题就出在版本上。

在我的这个工程中,因为我打算都用双引号 “  ” 来包含头文件,所以要把头文件都放到我的工程文件夹里,并设置好路径(这里不细说,有问题加后面的QQ联系)。问题就来了,stm32f10x.h这个头文件是keil mdk中的,路径为\keil mdk\ARM\INC\ST\STM32F10x,而stm32f10x_conf.h是来自我先前安装的IAR编译里的(前面说了,stm32f10x.h中是会包含stm32f10x_conf.h的。至于为什么会把IAR这个编译器中的头文件放进去,就不说了,呵呵),正确的方法是只是用一个编译器中的头文件,保证版本的一致性,在我的工程中,应该使用kei mdk中的stm32f10x_conf.h,而不是IAR中的。

那么我们看看这不同的编译器中的同名头文件有什么区别,如下图:


左边的是Keil中的,版本为V3.5.0,右边是IAR中的,版本为V1.0,版本不同!!!

版本不同,里面定义的内容不同,自然会出现不能替换的问题了。

所以要特别注意相关联的头文件(有包含关系的)是不是来自同一个版本。


如有问题,欢迎互相交流。

QQ:2524886219


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值