WINCE6.0新建工程编译出错的问题

作者:LoongEmbedded(kandi)

时间:2011.8.13

类别:WINCE系统开发

********************************LoongEmbedded********************************

基于WINCE6.0系统,根据PDA模板新建了工程之后,现把遇到的问题和解决的方法记录一下

 

 

1.     编译系统找不到atls.lib

 

这里要特别注意的是,发生类似这样的错误的时候,如果从\WINCE600\build.err文件来找错误的原因,很难,因为只有下面的信息:

F:\WINCE600\build.log(1) : error SYSGEN0000: error(s) in sysgen phase

这里只是告诉我们在sysgen阶段的时候出错,并没有告诉我们更有的出错信息,也就很难确定编译出错的原因,但我们可以从\WINCE600\buildl.og中获取更多有效的信息,如下:

Directory: F:\WINCE600\PUBLIC\SCRIPT\CESYSGEN

TARGETNAME: jscript

makefile.def: Including F:\WINCE600\public\common\oak\misc\sources.ReleaseType_OAK

NMAKE : fatal error U1073: don't know how to make 'F:\WINCE600\OSDesigns\sfck6410\sfck6410\Wince600\SMDK6410_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\atls.lib'

Stop.

从上面的信息可以分析是在编译SCRIPT这部分的时候,找不到所以来的atls.lib这个库文件,而atls.lib对应于Active Template Library(ATL)这个组件,选上这个组件后就可以解决这个问题

 

解决WINCE6.0新建工程编译出错的问题 - 男儿当自强 - 男儿当自强的博客

图1

JScript是由微软公司开发的活动脚本语言,是微软对ECMAScript规范的实现,而ECMAScript是一种由欧洲计算机制造商协会(ECMA)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,但实际上后两者是ECMA-262标准的扩展。

 

活动模板库(ATL Active TEmplate Library),是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。如果网络开发人员需要跟踪客户的请求,那么可以编写通用网关接口(CGI common gateway interface)程序,如果网络服务器是微软公司的网络信息服务器(IIS internet information server),那么还可以在网页中嵌入脚本语言。这种网页称为ASP页面,后缀名称为.asp。在ASP页面中的脚本语言将会首先被服务器解释执行,然后传送到用户端。另外的一种方法是将脚本语言先编译为可执行文件,这种能够被编译为可执行文件的脚本程序通常是用C++这种面向对象的编程语言编写的。由于可编译程序的运行速度明显优于脚本程序,因此,网页的运行速度明显变快。由于C++程序同操作系统结合得更为紧密。,因此,利用ATL编写的网页还有更多的优点。不过,用C++写程序也要比写脚本语言程序用的复杂程度高,消耗时间也要来得长一些。

 

  通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。微软公司称COM对象的运行速度更快,稳定程度也更强。这种COM组件可以包含属性页、对话框等等控件。

 

2.     解决了上面这个问题,接下来遇到编译系统找不到SDcardlib.lib的问题

BUILD: [01:0000005515:INFO  ] Directory: F:\WINCE600\PLATFORM\SMDK6410\SRC\DRIVERS\WIFI_SDIO\WLAN

BUILD: [01:0000005516:INFO  ] TARGETNAME: SDIO8686

BUILD: [01:0000005517:INFO  ] makefile.def: Including F:\WINCE600\public\common\oak\misc\sources.ReleaseType_PLATFORM

BUILD: [01:0000005518:ERRORE] NMAKE :  U1073: don't know how to make 'F:\WINCE600\OSDesigns\sfck6410\sfck6410\Wince600\SMDK6410_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\SDcardlib.lib'

BUILD: [01:0000005519:INFO  ] Stop.

由上面的信息可以判断,在编译SMDK6410\SRC\DRIVERS\WIFI_SDIO\WLAN的时候,编译系统提示找不到SDcardlib.lib,这说明WLAN的sources文件会用到SDcardlib.lib,选择了Device Drivers->SDIO->SDIO Memory->SD Memory组件就可以解决这个问题

解决WINCE6.0新建工程编译出错的问题 - 男儿当自强 - 男儿当自强的博客

图2

 

3.     解决了上面这个问题,接下来遇到编译系统找不到ddraw.lib的问题

BUILD: [00:0000006675:PROGC ] Building LINK Pass in F:\WINCE600\PLATFORM\SMDK6410\SAMPLES\MFC\MFC_DecodeDemo\MfcDemo\ directory.

BUILD: [01:0000006689:ERRORE] NMAKE :  U1073: don't know how to make 'F:\WINCE600\OSDesigns\sfck6410\sfck6410\Wince600\SMDK6410_ARMV4I\cesysgen\sdk\lib\ARMV4I\retail\ddraw.lib'

BUILD: [01:0000006691:ERRORE] NMAKE.EXE TargetExeFiles  -i -c BUILDMSG=Stop.  BUILDROOT=F:\WINCE600\PLATFORM\SMDK6410 CLEANBUILD=1 LINKONLY=1 NOPASS0=1 failed - rc = 2

由上面的信息可以判断,在编译SMDK6410\SAMPLES\MFC\MFC_DecodeDemo\MfcDemo的时候,编译系统提示找不到ddraw.lib,这说明WLAN的sources文件会用到ddraw.lib,选择了Core OS->Graphics and Multimedia Technologies->Graphics->DirectDraw组件就可以解决这个问题

解决WINCE6.0新建工程编译出错的问题 - 男儿当自强 - 男儿当自强的博客

图3

这样就可以解决了编译出错的信息,后面就可以基于这个工程文件来根据我们系统所需的功能来添加相应的组件了。

4.

NMAKE :  U1073: don't know how to make 'C:\WINCE600\OSDesigns\Cam6410\Cam6410\Wince600\SMDK6410_ARMV4I\cesysgen\oak\lib\ARMV4I\debug\ufnmdd.lib'

根据名字,ufnmdd.lib是USB Function Driver的mdd层支持库,根据Wince驱动常识,MDD层代码由微软提供,不是用户或者OEMer写的,那为什么还找不到呢?
因为,微软只把你选中的那些功能的库编译出来放在刚才楼上的同胞们提到的目录中,因此,如果找不到这个文件,那一定是你在VS2005下没选中相应的功能。那怎么选呢?
在VS2005下,打开工程的Catalog栏,点击...CORE OS...USB Function Driver下的USB Function Driver选项,然后再重新Build->Advanced Build Commands->sysgen,就OK了,

5、

BUILD: [01:0000004693:ERRORE] LEDDriver.obj : error LNK2001: unresolved external symbol dpCurSettings
BUILD: [01:0000004694:ERRORE] D:\WINCE600\platform\SMDK6410\target\ARMV4I\debug\LEDDriver.dll : fatal error LNK1120: 1 unresolved externals

这个是因为,其他驱动程序中都是用的DEBUGMSG,而这个leddriver.cpp用的RETAILMSG
其实这两个宏定义本质上是一回事。你google一下两者区别就OK。
你看看,其他的编译没问题的驱动源程序中是不是有这段代码:
#ifdef DEBUG
DBGPARAM dpCurSettings = {
  TEXT("I2C"), {
  TEXT("Error"), TEXT("Warn"), TEXT("Init"), TEXT("Open"),
  TEXT("Read"), TEXT("Write"), TEXT("IOCTL"), TEXT("IST"),
  TEXT("Power"), TEXT("9"), TEXT("10"), TEXT("11"),  
  TEXT("12"), TEXT("13"), TEXT("14"), TEXT("Trace"),
  },
  0x0003 // ZONE_WRN|ZONE_ERR
};
#endif // DEBUG

把这段代码复制到leddriver.cpp中开始的位置,#include头文件段落之后就可以编译通过了。

或者你把leddriver.cpp中所有RETAILMSG删掉应该也可以。你编译的是Debug版的,换成Release就应该可以解决这个问题.试试吧

posted on 2016-01-14 22:33  humbird  阅读(506)  评论(0编辑  收藏  举报

导航