platform builder 建立DLL工程编译出错,大家进来帮帮忙!

jbb0523 2010-05-05 04:56:16
我用PB5.0建立了一个DLL工程,前提:平台已编译成功!
DLL工程叫BEEP,功能仅实现驱动实验板上的BEEP响,由GPB1驱动,高电平时响声。
未填加BEEP.def 之前编译通过过,当在BEEP.def中加入:
LIBRARY BEEP
EXPORTS
BEP_Close
BEP_Deinit
BEP_Init
BEP_IOControl
BEP_Open
BEP_PowerDown
BEP_PowerUp
BEP_Read
BEP_Seek
BEP_Write
在BEEP.reg文件中加入:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\BEEP]
"Prefix"="BEP"
"Dll"="BEEP.dll"

之后再进行编译出现以下错误:
BUILD: [01:0000000028:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_Close
BUILD: [01:0000000029:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_Deinit
BUILD: [01:0000000030:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_IOControl
BUILD: [01:0000000031:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_Init
BUILD: [01:0000000032:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_Open
BUILD: [01:0000000033:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_PowerDown
BUILD: [01:0000000034:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_PowerUp
BUILD: [01:0000000035:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_Read
BUILD: [01:0000000036:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_Seek
BUILD: [01:0000000037:ERRORE] beep.def : error LNK2001: unresolved external symbol BEP_Write
BUILD: [01:0000000038:ERRORE] obj\ARMV4I\retail\beep.lib : fatal error LNK1120: 10 unresolved externals

请问大家这是什么错误呢?我的环境是S3C2440+WINCE5.0
...全文
160 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
曾经走过,嘿嘿
jbb0523 2010-05-07
  • 打赏
  • 举报
回复
解决方法如下,注意加粗的部分,比较与四楼的source文件的不同,就多了那句加粗的话!
因为pkfuncs.h等文件都在以下目录中:
E:\WINCE500\PBWorkspaces\study_catalog\WINCE500\smdk2440_ARMV4I\cesysgen\oak\inc\
WINCEREL=1
RELEASETYPE=LOCAL
_ISVINCPATH=$(_WINCEROOT)\public\common\sdk\inc;$(_WINCEROOT)\public\common\oak\inc;
_OEMINCPATH=$(_WINCEROOT)\public\common\oak\inc;$(_WINCEROOT)\public\common\sdk\inc;
TARGETNAME=beep
FILE_VIEW_ROOT_FOLDER= \
ReadMe.txt \
prelink.bat \
postlink.bat \

FILE_VIEW_RESOURCE_FOLDER= \

FILE_VIEW_INCLUDES_FOLDER= \
beep.h \
StdAfx.h \

SOURCES= \
beep.cpp \

TARGETTYPE=DYNLINK
TARGETLIBS= \
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib \

CDEFINES=$(CDEFINES) -Dbeep_EXPORTS
POSTLINK_PASS_CMD=postlink.bat
PRELINK_PASS_CMD=prelink.bat
FILE_VIEW_PARAMETER_FOLDER= \
beep.bib \
beep.reg \
beep.dat \
beep.db \
beep.def \
ProjSysgen.bat \

本帖结帖啦,有什么问题请到我的CSDN博客中留言。。。
http://blog.csdn.net/jbb0523
jbb0523 2010-05-07
  • 打赏
  • 举报
回复
解决方法如下,注意加粗的部分,比较与四楼的source文件的不同,就多了那句加粗的话!
因为pkfuncs.h等文件都在以下目录中:
E:\WINCE500\PBWorkspaces\study_catalog\WINCE500\smdk2440_ARMV4I\cesysgen\oak\inc\
WINCEREL=1
RELEASETYPE=LOCAL
_ISVINCPATH=$(_WINCEROOT)\public\common\sdk\inc;$(_WINCEROOT)\public\common\oak\inc;_OEMINCPATH=$(_WINCEROOT)\public\common\oak\inc;$(_WINCEROOT)\public\common\sdk\inc;
TARGETNAME=beep
FILE_VIEW_ROOT_FOLDER= \
ReadMe.txt \
prelink.bat \
postlink.bat \

FILE_VIEW_RESOURCE_FOLDER= \

FILE_VIEW_INCLUDES_FOLDER= \
beep.h \
StdAfx.h \

SOURCES= \
beep.cpp \

TARGETTYPE=DYNLINK
TARGETLIBS= \
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib \

CDEFINES=$(CDEFINES) -Dbeep_EXPORTS
POSTLINK_PASS_CMD=postlink.bat
PRELINK_PASS_CMD=prelink.bat
FILE_VIEW_PARAMETER_FOLDER= \
beep.bib \
beep.reg \
beep.dat \
beep.db \
beep.def \
ProjSysgen.bat \
gooogleman 2010-05-07
  • 打赏
  • 举报
回复
嘿嘿,不错。俺们都是这么过来的。嘿嘿
jbb0523 2010-05-06
  • 打赏
  • 举报
回复


楼主位的错误很低级,解决掉了,编译了内核,在VS下写了应用测试程序,但BEEP并没有响声,查了一下驱动源代码,原来是BEEP.CPP中有一句话还被注释着:if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))

也就是说地址没映射好呢,好吧,问题知道了,加上这句话,结果又出山现了问题:

BUILD: [01:0000000019:ERRORE] e:\WINCE500\PBWorkspaces\study_catalog\beep\beep.cpp(25) : error C3861: 'VirtualCopy': identifier not found, even with argument-dependent lookup

还是说发现不了VirtualCopy函数,在PB5.0的帮助中查了一下,
Windows CE Features > Core OS Services > Core OS Design Development > Kernel Reference > Kernel Functions
而VirtualAlloc和VirtualFree是这样的:
Windows CE Features > Core OS Services > Core OS Reference > Memory Management Reference > Memory Management Functions

我想这就是可以发现VirtualAlloc和VirtualFree而不能发现VirtualCopy的原因吧,但怎么样才能发现VirtualCopy呢?我感觉是sources 文件的问题,sources 源代码如4楼,到底应该加点儿什么内容才可以发现VirtualCopy呢?

之前也发过一个帖,有一些网友的解答,网址如下:
http://topic.csdn.net/u/20100429/21/6d416857-d434-4421-b590-28e60a9f7a49.html
jbb0523 2010-05-06
  • 打赏
  • 举报
回复
BUILD: [Thrd:Sequence:Type ] Message
BUILD: [00:0000000000:PROGC ] Checking for \WINCE500\sdk\bin\i386\srccheck.exe.
BUILD: [00:0000000001:PROGC ] SrcCheck exit code: 0 (dec).
BUILD: [00:0000000002:PROGC ] Compile and Link for ARM.
BUILD: [00:0000000003:PROGC ] Loading E:\WINCE500\PBWorkspaces\study_catalog\beep\Build.dat.
BUILD: [00:0000000004:PROGC ] Done.
BUILD: [00:0000000005:PROGC ] Computing include file dependencies:
BUILD: [00:0000000006:PROGC ] Checking for SDK include directory: E:\WINCE500\sdk\ce\inc.
BUILD: [00:0000000007:PROGC ] Scan \WINCE500\PBWorkspaces\study_catalog\beep\
BUILD: [00:0000000009:PROGC ] Compiling \WINCE500\PBWorkspaces\study_catalog\beep\ directory.
BUILD: [01:0000000016:PROGC ] Compiling .\beep.cpp
BUILD: [01:0000000019:ERRORE] e:\WINCE500\PBWorkspaces\study_catalog\beep\beep.cpp(25) : error C3861: 'VirtualCopy': identifier not found, even with argument-dependent lookup
BUILD: [01:0000000020:PROGC ] Linking E:\WINCE500\platform\smdk2440\lib\ARMV4I\retail\beep.lib
BUILD: [01:0000000029:ERRORE] LINK : fatal error LNK1181: cannot open input file 'obj\ARMV4I\retail\beep.obj'
BUILD: [00:0000000031:PROGC ] Files Warnings Errors
BUILD: [00:0000000032:PROGC ] Midl 0 0 0
BUILD: [00:0000000033:PROGC ] Resource 0 0 0
BUILD: [00:0000000034:PROGC ] Message 0 0 0
BUILD: [00:0000000035:PROGC ] Precomp Header 0 0 0
BUILD: [00:0000000036:PROGC ] C/Cpp/Cxx 1 0 1
BUILD: [00:0000000037:PROGC ] Assembler 0 0 0
BUILD: [00:0000000038:PROGC ] Static Libraries 0 0 0
BUILD: [00:0000000039:PROGC ] Dll's 1 0 1
BUILD: [00:0000000040:PROGC ] Exe's 0 0 0
BUILD: [00:0000000041:PROGC ] Resx 0 0 0
BUILD: [00:0000000042:PROGC ] Csharp Targets 0 0 0
BUILD: [00:0000000043:PROGC ] Other 0 0 1
BUILD: [00:0000000044:PROGC ]
BUILD: [00:0000000045:PROGC ] Total 2 0 3
BUILD: [00:0000000046:PROGC ]
BUILD: [00:0000000047:PROGC ] 0 Warnings, 3 Errors
Build for Windows CE (Release) (Built on Apr 14 2005 13:54:39)
File names: Build.log Build.wrn Build.err Build.dat

study_catalog - 2 error(s), 0 warning(s)
jbb0523 2010-05-06
  • 打赏
  • 举报
回复
无法找到virtualcopy的问题我解决了,在sources文件里加一句话就可以了,等明天我把驱动调成功了再结帖说明。谢谢大家了。。。
abcjeterabc 2010-05-06
  • 打赏
  • 举报
回复
学习 +1
InsaneCode 2010-05-06
  • 打赏
  • 举报
回复
这个错误确实是太马虎了~
jbb0523 2010-05-06
  • 打赏
  • 举报
回复
source文件是我在建立DLL工程时自动生成的,内容如下:
WINCEREL=1
RELEASETYPE=LOCAL
_ISVINCPATH=$(_WINCEROOT)\public\common\sdk\inc;
_OEMINCPATH=$(_WINCEROOT)\public\common\oak\inc;$(_WINCEROOT)\public\common\sdk\inc;
TARGETNAME=beep
FILE_VIEW_ROOT_FOLDER= \
ReadMe.txt \
prelink.bat \
postlink.bat \

FILE_VIEW_RESOURCE_FOLDER= \

FILE_VIEW_INCLUDES_FOLDER= \
beep.h \
StdAfx.h \

SOURCES= \
beep.cpp \

TARGETTYPE=DYNLINK
TARGETLIBS= \
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib \

CDEFINES=$(CDEFINES) -Dbeep_EXPORTS
POSTLINK_PASS_CMD=postlink.bat
PRELINK_PASS_CMD=prelink.bat
FILE_VIEW_PARAMETER_FOLDER= \
beep.bib \
beep.reg \
beep.dat \
beep.db \
beep.def \
ProjSysgen.bat \


找到问题所在了,谢谢楼上两位,BEEP.CPP是我从GPIO的驱动改过来的,结果忘了把其中的GIO_close等函数名改为BEP_close等函数了,现在编译通过了,哎,现在真是头大,就这么点儿小问题,麻烦各位了,呵呵
博说医械研发 2010-05-06
  • 打赏
  • 举报
回复
source文件,DLL源代码中是否有你DEF文件所写的那几个函数?
LaiQingXiong 2010-05-06
  • 打赏
  • 举报
回复
应该是你sources 没有引用BEEP.def
这个你找个模板开始搞不要自己全部填写。很容易出错的。
wjcapple 2010-05-06
  • 打赏
  • 举报
回复
顶起来,学习学习
jbb0523 2010-05-06
  • 打赏
  • 举报
回复
大家都不用platform builder 开发DLL驱动吗?大侠们呢?帮忙。。。
jbb0523 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 macrozhang001 的回复:]
toolhelp.h 路径在哪里,把他添加到SORUCES里面去,再编译.
[/Quote]都在这个目录下,改怎么修改sources呢?
E:\WINCE500\PBWorkspaces\study_catalog\WINCE500\smdk2440_ARMV4I\cesysgen\oak\inc\
IT铁哥 2010-05-06
  • 打赏
  • 举报
回复
toolhelp.h 路径在哪里,把他添加到SORUCES里面去,再编译.
jbb0523 2010-05-06
  • 打赏
  • 举报
回复
virtualcopy声明在pkfuncs.h中,可以我包含了pkfuncs.h文件后又出现了新问题:
#include <E:\WINCE500\PBWorkspaces\study_catalog\WINCE500\smdk2440_ARMV4I\cesysgen\oak\inc\pkfuncs.h>
注:study_catalog是我的定制操作系统的名字
我是使用PB的File--New Project or files--WCE Dynamic-Link Library建立的驱动
保存在E:\WINCE500\PBWorkspaces\study_catalog目录下,名叫BEEP
包含了pkfuncs.h文件后出现以下错误:
: fatal error C1083: Cannot open include file: 'toolhelp.h': No such file or directory
如果在 pkfuncs.h中把'toolhelp.h'去掉,错误会更多,到底我该怎么做啊?大家真的没人用PB这个功能做驱的吗?难道都是用手动在BSP中添加?帮帮忙呀。。。

19,498

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧