MDK升级后的头文件冲突
//=====================================================================
//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升级后的头文件冲突的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高并发网络架构解决方案分析
- 下一篇: [转载]struts+hibernate