编译出错: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就可以了,也很奇怪的