VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题
把VS2005工程有采用的Pocket PC 2003 SDK改為WINCE6.0 SDK,具體操作見鏈接
http://blog.csdn.net/loongembedded/article/details/9306225
改之后編譯出錯,錯誤信息如下:
1>Compiling...
1>UhfReader_windows.cpp
1>F:\Program Files\Microsoft VisualStudio 8\VC\ce\include\crtdefs.h(100) : fatal error C1189: #error :? ERROR: Use of C runtime library internalheader file.
1>UhfReader_common.cpp
1>F:\Program Files\Microsoft Visual Studio8\VC\ce\include\crtdefs.h(100) : fatal error C1189: #error :? ERROR: Use of C runtime library internalheader file.
1>UhfReader_API_Wince.cpp
1>F:\Program Files\Microsoft VisualStudio 8\VC\ce\include\crtdefs.h(100) : fatal error C1189: #error :? ERROR: Use of C runtime library internalheader file.
1>stdafx.cpp
1>F:\Program Files\Microsoft VisualStudio 8\VC\ce\include\crtdefs.h(100) : fatal error C1189: #error :? ERROR: Use of C runtime library internalheader file.
1>Generating Code...
“ERROR: Use of C runtime library internal header file.”是說使用了C運行庫內部頭文件引起了編譯的錯誤,這個問題沒有找到解決問題,但相關鏈接見下面:
http://bbs.csdn.net/topics/100070913
http://bbs.csdn.net/topics/350011943
?
換一種思路去解決編譯的問題,打開UhfReader_API_Wince工程文件,把里面的PocketPC 2003 (ARMV4)替換為C5000W (ARMV4I)并保存,但這時候打開工程文件的時候顯示的還是Pocket PC 2003 (ARMV4),如圖1所示:
圖1
還需要根據http://blog.csdn.net/loongembedded/article/details/9306225中的描述切換為C5000W(ARMV4I),再編譯還是出錯,信息如下:
1>UhfReader_windows.cpp
1>UhfReader_common.cpp
1>UhfReader_API_Wince.cpp
1>Generating Code...
1>Compiling resources...
1>Linking...
1>coredll.lib(COREDLL.dll) : fatalerror LNK1112: module machine type 'THUMB' conflicts with target machine type'ARM'
1>? Project : warning PRJ0018 : The following environmentvariables were not found:
出錯的信息指模塊機器(指令)類型‘THUMB’和目標平臺機器(指令)類型‘ARM’沖突,選擇project-> properties -> Configuration Properties -> Linker -> Command Line-> Additional options的內容做如下幾種處理均可以解決此問題:
1.? 把/subsystem:windowsce,4.20 /machine:ARM/ARMPADCODE替換為/subsystem:windowsce,6.00可以解決此問題。
圖2
因為我們采用的操作系統是WINCE6.0,這是最好的解決辦法。
?
2.? 在/subsystem:windowsce,4.20 /machine:ARM/ARMPADCODE后面增加/subsystem:windowsce,5.01 /machine:THUMB
/subsystem:windowsce,6.01 /machine:THUMB
如圖3所示:
圖3
此版本也可以解決此問題,但這兩班辦法編譯的logo信息卻不太一樣,這兩種解決問題的辦法在程序運行的過程中,是否有差異,還有待驗證:
圖4
我們先回到前面,為什么會有“module machine type 'THUMB' conflicts with target machinetype 'ARM'”這個編譯錯誤信息,在修改之前,roject ->properties -> Configuration Properties -> Linker -> Command Line ->Additional options的內容是“/subsystem:windowsce,4.20/machine:ARM /ARMPADCODE”,有其中的windowsce,4.20可知此工程是用EVC創建的,因為V2005創建的陳工都是windowsce5.0和6.0的,我們先來看msdn中關于遷移EVC工程到VS2005的相關描述:
圖5
可見EVC工程中的ARM對應于VS2005的ARMV4,而ARMV4 -> 它只支持 32 位 ARMV4 指令;ARMV4T ->“T”代表 Thumb(16 位指令模式);ARMV4I->“I”代表交互作用(Interworking),它允許 32 位指令和 16 位指令共存?。我們的SDK是基于WINCE6.0+ARMV4I創建的,所以就需要在Additional options替換為或是增加” /subsystem:windowsce,6.00”,而且WinCE系統對指令的支持如下:
WM4.2/ppc2002/2003支持armv4
WM5.0 支持armv4i
WINCE5.0和6.0支持ARMV4與ARMV4I
詳細信息見http://msdn.microsoft.com/en-us/library/ee482410(v=winembedded.60).aspx
所以就不存在上面編譯的錯誤信息
?
總結
以上是生活随笔為你收集整理的VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS2005工程增加SDK
- 下一篇: IMX51启动模式