当前位置: 代码迷 >> WinCE >> 编译出错:unresolved external symbol解决办法
  详细解决方案

编译出错:unresolved external symbol解决办法

热度:329   发布时间:2016-04-28 12:11:09.0
编译出错: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 void OALCPUPowerReset();

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就可以了,也很奇怪的
  相关解决方案