首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

编译失误:unresolved external symbol

2012-06-20 
编译出错:unresolved external symbol今天新建一个驱动,有一个reset.c和reset.s文件,都是在一个文件夹rese

编译出错:unresolved external symbol
今天新建一个驱动,有一个reset.c和reset.s文件,都是在一个文件夹reset下面,其中reset.c的RES_IOControl会定义到reset.s中定义到的OALCPUPowerReset,下面给出相关文件的内容:
1.sources文件:
!if "$(BSP_NOCAMERA)" == "1"
SKIPBUILD=1
!endif

SYNCHRONIZE_DRAIN=1
RELEASETYPE=PLATFORM
TARGETNAME=reset
TARGETTYPE=DYNLINK
DLLENTRY=DllEntry

TARGETLIBS= \
  $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \
  $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib\
   
SOURCELIBS= \

INCLUDES=$(INCLUDES); \

SOURCES= \
  reset.c
   
ARM_SOURCES= \
  reset.s

2.下面给出reset.s的定义
TEXTAREA
   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kandi add start;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LEAF_ENTRY OALCPUPowerReset
.....................

ENTRY_END 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kandi add end;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

3.reset.c中的相关部分:
extern voidOALCPUPowerReset();

BOOL
RES_IOControl(
  DWORD hDeviceContext, 
  DWORD dwCode,
  PBYTE pBufIn,
  DWORD dwLenIn,
  PBYTE pBufOut,
  DWORD dwLenOut,
  PDWORD pdwActualOut
  )
{
  DWORD dwErr = ERROR_SUCCESS;
  BOOL bRc = TRUE;
  RETAILMSG(1,(TEXT(">RES_IOControl(0x%x, 0x%x, %d, 0x%x)\r\n"),
  dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut ));

  switch (dwCode) {
  case 1:
RETAILMSG(1,(TEXT("kandi reset test\r\n")));
//KernelIoControl(IOCTL_HAL_REBOOT,NULL,0,NULL,0,NULL);
OALCPUPowerReset();
break;

  default:
  break;  
  }

  return bRc;
}
编译提出出错:reset.obj : error LNK2019: unresolved external symbol OALCPUPowerReset referenced in function RES_IOControl

可是我把sources文件的TARGETTYPE=DYNLINK改为TARGETTYPE=LIBRARY,编译就通过了,很奇怪,不知道具体是什么原因,麻烦知道的朋友告知,大家也可以试一下?看怎么解决这个问题(我需要的是一个dll,而不是lib)

[解决办法]
OALCPUPowerReset 是汇编的,你在汇编export 没有?
[解决办法]
是不是你要产生的动态链接库所依赖的库都要静态连接呀?就是说你产生的reset.lib是要被其他动态库静态链接进去的,所以不能产生reset.dll。
[解决办法]
好像是与原理有关,我把PUBLIC下面的MSFLASH\RAM目录下的内容复制到BSP\DRIVERS下,通过sysgen capture转换,改成DLL编译出现楼主类似的错误,DSK_XXX都不能被解析。如果改成LIB就可以了,也很奇怪的

热点排行