//=====================================================================
//TITLE:
//    MDK升级后的头文件冲突
//AUTHOR:
//    norains
//DATE:
//    Friday  17-June-2011
//Environment:
//    Keil MDK 4.2
//    .NET Micro Framework Porting 4.1
//=====================================================================

因为在移植的时候,发现了不少MDK编译的一些问题,于是便想升级到最新版本,看看是否这些存在的问题已经被修复。可是没想到的是,在MDK 4.0可以顺利编译通过的.NET Micro Framework Porting Solution,到了MDK 4.2却是会发生编译错误,如图所示:

从图中可以看到,是usb_def.h文件出错,理由是某些类型没有被定义。像这种情形我们出来起来是很有经验的,十有八九是没有包含stm32f10x.h文件。也就是说,只要在包含usb_def.h之前包含stm32f10x.h文件即可,比如:
#include "stm32f10x.h" #include "usb_def.h"

依照该思路,查找自己所建立的solution,才发现自己的代码中根本就没有使用到usb_def.h文件,而编译的时候却提示该文件有错!这究竟是怎么回事呢?

经过对比才发现,MDK 4.2版本的" /Keil/ARM/RV31/INC"路径下增加了USB的相关文件,而其中的"usb.h"就是追魁祸首!

为什么会如此呢?因为"usb.h"也是.NET Micro Framework Porting的一个代码文件,其位于"$(SPOCLIENT) /DeviceCode/pal/COM/usb"!而代码中为了使用.NET Micro Framework的USB资源,所以简单地如此包含了该头文件:
#include "usb.h"

但在对solution进行编译的时候,首先搜索的是"/Keil/ARM/RV31/INC"路径,因此该"usb.h"便是"/Keil/ARM/RV31/INC/usb.h",而不是"$(SPOCLIENT) /DeviceCode/pal/COM/usb/usb.h"。

那应该如何解决这个问题呢?最简单的方法可能大家都能猜到,直接将"/Keil/ARM/RV31/INC/usb.h"给删掉!当然,这个方法是可行的,但却感觉并不是那么完美。谁知道删掉它,会不会对别的方面有影响呢?这只是一个治标而不治本的方法。

其实还有更好的方式,在包含的时候,指出其相对路径即可。比如我使用"usb.h"这个头文件的源代码是位于"$(SPOCLIENT) /DeviceCode/Targets/Native/STM32F10x/DeviceCode/USB/",根据之前所说的所需要的.NET Micro Framework Porting的"usb.h"是位于"$(SPOCLIENT) /DeviceCode/pal/COM/usb",那只需要在代码中如此指出即可:
  #include "../../../../../../DeviceCode/pal/COM/usb/usb.h"
  
    更改之后编译,顺利通过,如图所示:
  

转载于:https://www.cnblogs.com/wodeyitian/archive/2011/06/17/2460227.html

MDK升级后的头文件冲突相关推荐

  1. 解决更新到os x10.11后openssl头文件无法找到的问题

    os x从10.10更新到10.11后,原有代码编译报错,#include <openssl/ssl.h>等头文件无法找到: "openssl/ssl.h: No such fi ...

  2. MDK编译后生成bin文件占用FLASH大小说明

    转自:http://blog.csdn.net/kuangdoushi/article/details/69499933 MDK编译程序完成后,如下所示: linking... Program Siz ...

  3. win 10升级后不能访问服务器文件夹,Win10打开某些文件夹出现“无法访问”的解决方法...

    win10电脑自动更新后访问某一些文件夹时出现提示"无法访问拒绝访问",导致文件夹打开失败,让大家感到很烦恼,怎么办?这一般是由于权限设置不当造成的,接下来,下面详细讲述一下遇到这 ...

  4. 解决VC2015包含stdint.h头文件冲突问题

    stdint.h是C99的标准,主要用于统一跨平台数据定义. MSVC中不带有这个头文件,直到VS2010. 在之前的版本里面,我们可以: (1)下载这个头文件 download a MS versi ...

  5. win 10升级后不能访问服务器文件夹,Win10系统文件夹无法访问拒绝访问怎么办?...

    不知道大家是否遇到过,访问某些文件夹的时候,出现提示"无法访问拒绝访问该文件夹".那么,Win10系统文件夹无法访问拒绝访问怎么办呢?下面,我们就一起往下看看Win10系统文件夹无 ...

  6. winhttp和wininet头文件冲突

    合并之后的文件winhttp.h /*++Copyright (c) Microsoft Corporation. All rights reserved.Module Name:winhttp.hA ...

  7. .h头文件 .lib动态链接库文件 .dll 动态链接库

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  8. .h头文件 .lib库文件 .dll动态链接库文件关系

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  9. Centos下GCC引用mysql头文件和库文件

    1.安装mysql-server: yum install mysql-server 2.gcc连接mysql的库安装: yum -y install  mysql-devel 安装后,头文件在/us ...

最新文章

  1. pip install numpy/pandas时报错的解决方法
  2. php 请求url 返回json,php解析请求url并返回json数据
  3. 在ASP.Net 2.0中实现多语言界面的方法
  4. cfd计算linux windows,CFD计算分析时常用的数值模拟方法 | 坐倚北风
  5. 两个SAP UI5脚手架应用加载性能的比较
  6. KDD走进阿里 数百专家聚集探讨产学研一体化
  7. 一个程序如何连接到外网_如何开发制作小程序?做一个电商带直播小程序
  8. RTSP/RTMP播放端录像不可忽视的几个设计要点
  9. leetcode —— 区间加法
  10. easypoi 导入失败返回错误文件_从Excel批量导入数据说到ForkJoin的原理
  11. 从M个数中随机等可能的取出N个的问题
  12. 使用XAML和SharpMap渲染一幅地图
  13. lj245a引脚功能图_干货|教你如何看懂单片机时序图
  14. 03-树2. Tree Traversals Again (25)
  15. 163的在线编辑器简析和配置使用
  16. C++/OpenGL 入门(1):关于VS2017 中OpenGL部分安装过程
  17. python基础五之for和while
  18. 海鸣威《离开为了更好的回来》 MV首播感心动耳
  19. Oracle Order by 按汉字拼音排序
  20. 剪辑视频怎么加音效 视频音效常用都有哪些类型

热门文章

  1. C语言应用笔记:C语言typedef关键字及其使用
  2. python导入模块报错_Python 导入上层目录模块报错
  3. 字符斜杠是合法常量吗_【面试秘籍】你对String的intern方法了解吗
  4. php 多图上传编辑器,ThinkPHP5整合LayUI编辑器图片上传
  5. 网络监控系统中如何选择工业交换机?
  6. 一号信令是什么?1号信令和7号信令的区别介绍!
  7. 【渝粤教育】电大中专药剂学基础知识 (3)作业 题库
  8. 【渝粤题库】广东开放大学 商务交际听说 形成性考核
  9. 基于E18-2G4U04B的ZigBee3.0无线数据抓包安装方法
  10. 浅谈工业无线遥控器的基本定义及原理