如何确定库文件与组件的关系

acmydragon   2009-1-12 14:58 楼主
BUILD: [01:0000000022:WARNN ] e:\WINCE500\PLATFORM\SMDK2440\DRIVERS\PCMCIA\init.c(83) : warning C4197: 'volatile PUCHAR' : top-level volatile in cast is ignored
BUILD: [01:0000000023:WARNN ] e:\WINCE500\PLATFORM\SMDK2440\DRIVERS\PCMCIA\init.c(84) : warning C4197: 'volatile PUCHAR' : top-level volatile in cast is ignored
BUILD: [01:0000000024:WARNN ] e:\WINCE500\PLATFORM\SMDK2440\DRIVERS\PCMCIA\init.c(225) : warning C4197: 'volatile PUCHAR' : top-level volatile in cast is ignored
BUILD: [01:0000000025:WARNN ] e:\WINCE500\PLATFORM\SMDK2440\DRIVERS\PCMCIA\init.c(226) : warning C4197: 'volatile PUCHAR' : top-level volatile in cast is ignored
BUILD: [01:0000000026:PROGC ] Compiling .\memory.c
BUILD: [01:0000000029:PROGC ] Compiling .\socket.c
BUILD: [01:0000000032:PROGC ] Compiling .\window.c
BUILD: [01:0000000045:ERRORE] NMAKE :  U1073: don't know how to make 'E:\WINCE500\platform\new2440\lib\ARMV4I\debug\cardserv.lib'
Build for Windows CE (Release) (Built on Apr 14 2005 13:54:39)
File names: Build.log Build.wrn Build.err Build.dat
BUILD: [01:0000000047:ERRORE] NMAKE.EXE   -i -c BUILDMSG=Stop.  NOLINK=1 NOPASS0=1 failed - rc = 2


大家好
从上面的信息能看出什么问题呢?

错误提示中的cardserv.lib与什么组件有关呢?
我在帮助文档里怎么查找与它有关的内容呢?我没搜到
我搜了一下,这个库文件在E:\WINCE500\PLATFORM\SMDK2440\DRIVERS\PCMCIA\sources文件里
这个PCMCIA又是什么?怎么知道她与哪个组件有关呢?

回复评论 (14)

看头文件里面的编译开关
点赞  2009-1-12 15:28
如果有源码,双击组件会自动跳到源码的,然后你去看看sources等文件就OK了。
——————————————————————————————————————
这个lib文件的使用,一般是包含该lib的头文件即可,因为头文件对lib之内的函数做了声明,这样就可以调用lib之内的函数干活了
PCMCIA是三星BSP本来的驱动啊,不是微软的组件。
点赞  2009-1-12 15:43
cardserv.lib 是不是没有呢?
点赞  2009-1-12 16:27
cardserv.lib 是没有啊

PCMCIA是三星BSP本来的,
E:\WINCE500\PLATFORM\SMDK2440\DRIVERS\PCMCIA\sources
上面这个文件里含有这个库,之前我也是用三星的这个BSP啊,编译也没报错,现在怎么有错误了?这个PCMCIA是什么用途,可以在编译的系统中去掉它吗?或者编译时不在编译那个原文件能做到吗?
下面是sources的内容
!if 0
Copyright (c) 2002. Samsung Electronics, co. ltd  All rights reserved.
!endif

!if "$(BSP_NOPCMCIA)" == "1"
SKIPBUILD=1
!endif

SYNCHRONIZE_DRAIN=1

TARGETNAME=pcmcia
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK
TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
#!IF $(_WINCEOSVER) >= 400
#           $(_COMMONOAKROOT)\target\$(_CPUINDPATH)\0409\pcmcia.res \
#!ELSE
#           $(_COMMONOAKROOT)\target\$(_CPUINDPATH)\usa\pcmcia.res \
#!ENDIF
                   $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib
                  
SOURCELIBS=$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\cardserv.lib \
           $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\drvlib.lib
PREPROCESSDEFFILE=1
DEFFILE=$(_PUBLICROOT)\common\oak\inc\pcmcia.def
#CDEFINES=$(CDEFINES) -DUSE_NEW_SERIAL_MODEL
DLLENTRY=DllEntry

INCLUDES=\
                                $(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLICROOT)\common\ddk\inc;        \
                                ..\..\inc
SOURCES= \
    init.c   \
    memory.c \
    socket.c \
    window.c
点赞  2009-1-12 17:46
一般是因为pb里面没有对应的组件,或者有但是没有add到project中,编译过程中就没有对应的环境变量支持,导致需要的lib无法被编译,driver也就无法link需要的lib,结果报错。
点赞  2009-1-12 19:50
有些没有用的驱动去掉即可
————————————————
点赞  2009-1-12 20:28
引用: 引用 6 楼 gooogleman 的回复:
有些没有用的驱动去掉即可
————————————————


怎么去掉?在哪里去掉?BSP里吗?

我不想编译某个文件应该怎么做呢?是不是要到某个文件里去改?make文件?怎么找到相对应的文件呢?
点赞  2009-1-13 10:52
# Copyright (c) 2002. Samsung Electronics, co. ltd  All rights reserved.
# !IF $(_WINCEOSVER) >= 400
#           $(_COMMONOAKROOT)\target\$(_CPUINDPATH)\0409\pcmcia.res \
# !ELSE
#           $(_COMMONOAKROOT)\target\$(_CPUINDPATH)\usa\pcmcia.res \
# !ENDIF
# CDEFINES=$(CDEFINES) -DUSE_NEW_SERIAL_MODEL

SYNCHRONIZE_DRAIN=1
TARGETNAME=pcmcia
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK
TARGETLIBS= \
  $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
  $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \

SOURCELIBS= \
  $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\cardserv.lib \
  $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\drvlib.lib \

PREPROCESSDEFFILE=1
DEFFILE=$(_PUBLICROOT)\common\oak\inc\pcmcia.def
DLLENTRY=DllEntry
INCLUDES= \
  $(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLICROOT)\common\ddk\inc; \
  ..\..\inc \

SOURCES= \
  init.c \
  memory.c \
  socket.c \
  window.c \


!IF "$(BSP_NOPCMCIA)" == "1"
SKIPBUILD=1
!ENDIF

这是sources的原文件,和上面的有区别,为什么会这样呢?我是用三星的2440BSP新创建的BSP,在新的BSP里文件就变了,是这样吗?
点赞  2009-1-13 13:03
不是你想编译的文件有问题,而是这个文件需要的lib库没有。
这个lib库对应的文件或者(通常)在public下,或者在platform的bsp的common下,或者在某个不常见的地方。
不管在哪里,都需要有一个环境变量来决定将其编译从而生成这个lib。

现在你的project就是没有产生这个“环境变量”,导致该lib没有被编译生成。
点赞  2009-1-13 16:56
引用: 引用 9 楼 shuiyan 的回复:
不是你想编译的文件有问题,而是这个文件需要的lib库没有。
这个lib库对应的文件或者(通常)在public下,或者在platform的bsp的common下,或者在某个不常见的地方。
不管在哪里,都需要有一个环境变量来决定将其编译从而生成这个lib。

现在你的project就是没有产生这个“环境变量”,导致该lib没有被编译生成。


这个库我可以找到,在
E:\WINCE500\PLATFORM\new2440\lib\ARMV4I\retail
文件夹下

那怎么产生环境变量呢?
点赞  2009-1-13 17:08
我没有那么厉害,我只是用三星的BSP生成了个新的BSP,我什么文件都没有动.原bSP下的PCMCIA单独编译没问题,新的就有问题.
我不明白,怎么就出问题了,让人恼火啊.PB是怎么编译驱动的呢?从哪里可以看到编译顺序?俺不编译PCMCIA还不行吗?
我上哪里去找了,高人指点.
点赞  2009-1-13 17:38
放假回家了
所以结帖了
有问题回来在向大家请教
点赞  2009-1-13 20:49
楼主问题解决没有,我也碰到这个问题,一筹莫展,请教楼主!
点赞  2009-11-2 14:50
引用: 引用 13 楼 vlog_user 的回复:
楼主问题解决没有,我也碰到这个问题,一筹莫展,请教楼主!


呵呵,这个帖子你也发现了,我有一段时间没搞CE了,我记得好像是在source 文件中把不用的库屏蔽掉了比如
SOURCELIBS= \
  $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\cardserv.lib \
如果这个库出问题了,而且我又不用这个库,就屏蔽掉,不记得后来还有没有问题了,呵呵

把文件做备份,之后自己试着修改吧。祝你好运!
点赞  2009-11-2 15:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复