怎么排除iar 链接时 Error[Li005]: no definition for
我今天用iar 编译链接, 总有几个错误,不能排除错误的意思是USBD_ReqGetStatus没有被定义, 看上去是头文件有包含,但到连接时找不到函数实现,就报这个错误。
我就检查usbd_core.c 文件, 可那有直接的定义,所以不知道怎么做了。
错误报告信息:
Error: no definition for "USBD_ReqGetStatus" [referenced from D:\kl25z\
kl25_sc_rev10\klxx-sc-baremetal\build\iar\platinum\FLASH_128KB\Obj\usbd_core.o]
Error: no definition for "USBD_ReqSetClrFeature" [referenced from D:\kl25z\
kl25_sc_rev10\klxx-sc-baremetal\build\iar\platinum\FLASH_128KB\Obj\usbd_core.o]
Error: no definition for "USBD_ReqSetAddress" [referenced from D:\kl25z\
kl25_sc_rev10\klxx-sc-baremetal\build\iar\platinum\FLASH_128KB\Obj\usbd_core.o]
Error: no definition for "USBD_ReqGetConfiguration" [referenced from D:\kl25z\
kl25_sc_rev10\klxx-sc-baremetal\build\iar\platinum\FLASH_128KB\Obj\usbd_core.o]
Error while running Linker
查看usbd_core.c 文件(摘录)全文见附件:
/*
*Get Status USB Device Request
* Parameters: None
* Return Value: TRUE - Success, FALSE - Error
*/
inline BOOL USBD_ReqGetStatus (void) {
U32 n, m;
switch (USBD_SetupPacket.bmRequestType.Recipient) {
case REQUEST_TO_DEVICE:
USBD_EP0Data.pData = (U8 *)&USBD_DeviceStatus;
break;
case REQUEST_TO_INTERFACE:
if ((USBD_Configuration != 0) && (USBD_SetupPacket.wIndexL < USBD_NumInterfaces)) {
*((__packed U16 *)USBD_EP0Buf) = 0;
USBD_EP0Data.pData = USBD_EP0Buf;
} else {
return (__FALSE);
}
break;
case REQUEST_TO_ENDPOINT:
n = USBD_SetupPacket.wIndexL & 0x8F;
m = (n & 0x80) ? ((1 << 16) << (n & 0x0F)) : (1 << n);
if (((USBD_Configuration != 0) || ((n & 0x0F) == 0)) && (USBD_EndPointMask & m)) {
*((__packed U16 *)USBD_EP0Buf) = (USBD_EndPointHalt & m) ? 1 : 0;
USBD_EP0Data.pData = USBD_EP0Buf;
} else {
return (__FALSE);
}
break;
default:
return (__FALSE);
}
return (__TRUE);
}
我把所有的inline 去掉,就可以编译链接了,但其他程序这样写怎么就可以呢? 你可以把所有函数定义的inline关键字去掉试试。
内联函数正常是不会产生真正的函数的,都是直接在调用处展开。
另外不知道你这些函数是怎么声明的,有没有带inline关键字? 我也遇到了这个问题,该怎么搞?c文件中不能定义inline吗
页:
[1]