zoukankan      html  css  js  c++  java
  • WINCE6.0新建工程编译出错的问题

    作者:LoongEmbedded(kandi)

    时间:2011.8.13

    类别:WINCE系统开发

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

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

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

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

    F:WINCE600uild.log(1) : error SYSGEN0000: error(s) in sysgen phase

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

    Directory: F:WINCE600PUBLICSCRIPTCESYSGEN

    TARGETNAME: jscript

    makefile.def: Including F:WINCE600publiccommonoakmiscsources.ReleaseType_OAK

    NMAKE : fatal error U1073: don't know how to make 'F:WINCE600OSDesignssfck6410sfck6410Wince600SMDK6410_ARMV4IcesysgenoaklibARMV4I etailatls.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:WINCE600PLATFORMSMDK6410SRCDRIVERSWIFI_SDIOWLAN

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

    BUILD: [01:0000005517:INFO  ] makefile.def: Including F:WINCE600publiccommonoakmiscsources.ReleaseType_PLATFORM

    BUILD: [01:0000005518:ERRORE] NMAKE :  U1073: don't know how to make 'F:WINCE600OSDesignssfck6410sfck6410Wince600SMDK6410_ARMV4IcesysgenoaklibARMV4I etailSDcardlib.lib'

    BUILD: [01:0000005519:INFO  ] Stop.

    由上面的信息可以判断,在编译SMDK6410SRCDRIVERSWIFI_SDIOWLAN的时候,编译系统提示找不到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:WINCE600PLATFORMSMDK6410SAMPLESMFCMFC_DecodeDemoMfcDemo directory.

    BUILD: [01:0000006689:ERRORE] NMAKE :  U1073: don't know how to make 'F:WINCE600OSDesignssfck6410sfck6410Wince600SMDK6410_ARMV4IcesysgensdklibARMV4I etailddraw.lib'

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

    由上面的信息可以判断,在编译SMDK6410SAMPLESMFCMFC_DecodeDemoMfcDemo的时候,编译系统提示找不到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:WINCE600OSDesignsCam6410Cam6410Wince600SMDK6410_ARMV4IcesysgenoaklibARMV4Idebugufnmdd.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:WINCE600platformSMDK6410 argetARMV4IdebugLEDDriver.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就应该可以解决这个问题.试试吧

  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/killer-xc/p/5131954.html
Copyright © 2011-2022 走看看