解决:keil报错invalid redeclaration of type name "s32"
来源:互联网 发布:知乎的神回答 编辑:程序博客网 时间:2024/04/28 07:44
原文链接:http://blog.csdn.net/iceiilin/article/details/6100494
keil 4.00。
在ST官网上下的固件包,用STM32F10x_StdPeriph_Lib_V3.4.0/Project/STM32F10x_StdPeriph_Template里的工程,编译正确。以下尝试了两种新建工程的方法,均失败:
1。 将固件包里的例程和相应的CMSIS、StdPeriph_Driver拷到工程下,修改target options里的C/C++ include paths项为“../;../Src/App;../Src/CMSIS;../Src/Lib”,编译报错“D:/Keil/ARM/INC/ST/STM32F10x/stm32f10x_type.h(23): error: #256: invalid redeclaration of type name "s32" (declared at line 470 of "Src/App/stm32f10x.h")”等。
2。 若在工程中添加的文件为固件包中的链接(而不是拷贝),完全按照template里的结构,并将include paths按照template进行修改,编译报错“Keil/ARM/INC/ST/STM32F10x/stm32f10x_conf.h(147): warning: #47-D: incompatible redefinition of macro "HSE_Value" (declared at line 511 of "STM32F10x_StdPeriph_Lib_V3.4.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h")”等。
KEIL安装目录下的为旧版lib,工程中使用的为新版,两者代码结构上有所不同。而编译器在编译了工程文件的同时,自动链接了KEIL安装目录下的文件,造成冲突。但是在选项中没有找到配置是否链接KEIL安装目录下LIB的地方。
问题原理:
对照固件包中模板工程的链接情况,逐个对比模板工程和自建工程中,各源代码链接的所需库的位置。若模板中链接的是固件包中的文件,如system_stm32f10x.h 或 stm32f10x_config.h,即新版lib;而自建工程中链接的相应文件位置为Keil安装目录,说明工程设置中没有包含该库的路径,使编译器自动寻找安装目录中的旧版文件。由于库代码结构不同,造成编译错误。因此需要在工程设置的include paths栏中添加新版lib的路径。
问题解决:
对于第二种建立工程的步骤,通过报错的信息很容易看出,编译过程链接了keil安装目录下的conf.h,而实际需要使用固件包中的该文件。因此,在include paths中添加固件包conf.h所在目录,即可解决问题。
对于第一种建立工程的步骤,stm32f10x_type.h不是工程源代码中直接需要包含和应用的头文件,不容易找到未设定的链接路径。因此,采用“问题原理”中的办法,逐一链接库对比,修改链接路径,也可以找到未包含的位置,解决问题。
还需要注意区分的是,路径中的“../”意为工程文件上一级目录,“./”为工程文件的同级目录。我们在一些论坛上看到别人贴的自己的路径中,第一个即为"../",不是必须的。另外,编译器只能在当前目录下搜索文件,不会进入下一级目录,因此指定的路径需要很具体。
出现这个问题时,搜了不少论坛,也在论坛上问过大牛,大致都是配置路径有问题,却没有说到具体的解决办法,自己摸索了好一阵。的确是这个原因,以后如果我遇到相同的提问,估计也会是这么回答。不过,理论和具体实践还是有距离的。
- 解决:keil报错invalid redeclaration of type name "s32"
- 解决:keil报错invalid redeclaration of type name "s32"
- keil新建工程及编译报错——invalid redeclaration of type name "s32" 的解决
- keil新建工程及编译报错——invalid redeclaration of type name "s32" 的解决
- mdk报错invalid redeclaration of type name "s32"
- ***stm32f10x_type.h(23): error: #256: invalid redeclaration of type name "s32" 原因+解决方案
- keil报错:stm32f10x_type.h:error:256:invalid invalid redeclaration of type
- 关于STM32头文件包含出现No such file or directory和 invalid redeclaration of type name...的问题
- 关于STM32头文件包含出现No such file or directory和 invalid redeclaration of type name...的问题
- QtCreator编译报错 redeclaration of C++ built-in type 'wchar_t'
- invalid use of incomplete type 报
- arduino写自定义库文件报错解决not name of type、not declared in this scope
- C++引用报错:invalid initialization of non-const reference of type ‘std::string&’ from an rvalue of type
- thrift+python 报错Invalid method name
- Qt 编译报错 error: invalid use of incomplete type 'class QXxx'
- nodejs使用npm发布模块带npm报错(verbose stack Error: Invalid name: "")解决
- Cocos2d-x使用控件报错(unknow type name 或者use of undeclared identifier )
- eclipse报错之The hierarchy of the type “class name” is inconsistent (jface)
- Android热修复之AndFix.android studio
- 给定一个日期,用mysql得到该日期所对应的星期一所对应的日期和星期天所对应的日期。
- 【机器学习基础】生成模型和判别模型
- 网络字节序与主机字节序
- java内存区域--运行时数据区域
- 解决:keil报错invalid redeclaration of type name "s32"
- select2 及tree用法,直接代码
- linux下的signal()函数
- 【机器学习基础】机器学习基础引入
- bootstrap-datetimepicker 时间选择
- 2016 知识点汇总 mindmap
- .Net 中的反射(查看基本类型信息)
- 高效程序员的10个习惯
- 无符号序列号溢出问题