storage size of ‘XXX’ isn’t known

本文探讨了在使用GCC编译器时出现的“storagesizeof‘at_static_client_t’isn’tknown”错误,并提供了两种解决方案:一种是在源文件中包含更多的头文件,另一种是在相关头文件之间建立正确的依赖关系。

假设有三个文件a.c / b.h/  c. h

a.c的内容如下

#include   "c.h"
mqtt_client_t at_static_client_t;
/* 逻辑部分 */

b.h的内容如下

/* 头文件部分 */
struct mqtt_client_s
{
结构体内容
}

c.h的内容如下

/*头文件*/
typedef struct mqtt_client_s mqtt_client_t;

此时在GCC编译会报错 storage size of ‘at_static_client_t’ isn’t known 如果在a.c中再include b.h 这个问题就解决了,因为最终的定义部分也引用了。

但是,如果在c.h中引用b.h,在a.c中不做改的呢,此时编译报错,猜测可能是b.h 和 c.h耦合严重导致的,所以只能在第三个文件中同时引用,如果

二者不冲突,按照这种改法是否可行还有待验证。


如果有大神遇到过类似问题,请不吝留言指教。

CANopenLinux/CO_error.h:103:21: error: field ‘timestamp’ has incomplete type 103 | struct timespec timestamp; /**< listen only mode started at this time */ | ^~~~~~~~~ CANopenLinux/CO_driver.c:40:1: error: unknown type name ‘pthread_mutex_t’ 40 | pthread_mutex_t CO_EMCY_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~ CANopenLinux/CO_dCANopenLinux/CO_error.h:103:21: error: field ‘timestamp’ has incomplete type 103 | struct timespec timestamp; /**< listen only mode started at this time */ | ^~~~~~~~~ CANopenLinux/CO_driver.c:40:1: error: unknown type name ‘pthread_mutex_t’ 40 | pthread_mutex_t CO_EMCY_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:40:33: error: ‘PTHREAD_MUTEX_INITIALIZER’ undeclared here (not in a function) 40 | pthread_mutex_t CO_EMCY_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:41:1: error: unknown type name ‘pthread_mutex_t’ 41 | pthread_mutex_t CO_OD_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c: In function ‘disableRx’: CANopenLinux/CO_driver.c:95:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 95 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:96:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 96 | int ret = setsockopt(CANmodule->CANinterfaces[i].fd, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); | ^~ CANopenLinux/CO_driver.c:98:61: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 98 | log_printf(LOG_ERR, CAN_FILTER_FAILED, CANmodule->CANinterfaces[i].ifName); | ^~ CANopenLinux/CO_driver.c: In function ‘setRxFilters’: CANopenLinux/CO_driver.c:119:23: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 119 | if ((CANmodule->rxFilter[i].can_id != 0) || (CANmodule->rxFilter[i].can_mask != 0)) { | ^~ CANopenLinux/CO_driver.c:119:63: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 119 | if ((CANmodule->rxFilter[i].can_id != 0) || (CANmodule->rxFilter[i].can_mask != 0)) { | ^~ CANopenLinux/CO_driver.c:121:44: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 121 | rxFiltersCpy[count] = CANmodule->rxFilter[i]; | ^~ CANopenLinux/CO_driver.c:133:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 133 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:134:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 134 | int ret = setsockopt(CANmodule->CANinterfaces[i].fd, SOL_CAN_RAW, CAN_RAW_FILTER, rxFiltersCpy, | ^~ CANopenLinux/CO_driver.c:137:61: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 137 | log_printf(LOG_ERR, CAN_FILTER_FAILED, CANmodule->CANinterfaces[i].ifName); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_init’: CANopenLinux/CO_driver.c:178:5: error: unknown type name ‘CO_CANptrSocketCan_t’ 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:178:41: error: ‘CO_CANptrSocketCan_t’ undeclared (first use in this function) 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:178:41: note: each undeclared identifier is reported only once for each function it appears in CANopenLinux/CO_driver.c:178:62: error: expected expression before ‘)’ token 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^ CANopenLinux/CO_driver.c:181:14: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 181 | CANmodule->epoll_fd = CANptrReal->epoll_fd; | ^~ CANopenLinux/CO_driver.c:181:37: error: request for member ‘epoll_fd’ in something not a structure or union 181 | CANmodule->epoll_fd = CANptrReal->epoll_fd; | ^~ CANopenLinux/CO_driver.c:182:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 182 | CANmodule->CANinterfaces = NULL; | ^~ CANopenLinux/CO_driver.c:183:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 183 | CANmodule->CANinterfaceCount = 0; | ^~ CANopenLinux/CO_driver.c:201:14: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 201 | CANmodule->rxFilter = calloc(CANmodule->rxSize, sizeof(struct can_filter)); | ^~ CANopenLinux/CO_driver.c:202:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 202 | if (CANmodule->rxFilter == NULL) { | ^~ CANopenLinux/CO_driver.c:209:27: warning: conversion from ‘unsigned int’ to ‘uint16_t’ {aka ‘short unsigned int’} changes value from ‘4294967295’ to ‘65535’ [-Woverflow] 209 | rxArray[i].mask = 0xFFFFFFFFU; | ^~~~~~~~~~~ CANopenLinux/CO_driver.c:212:19: error: ‘CO_CANrx_t’ has no member named ‘can_ifindex’ 212 | rxArray[i].can_ifindex = 0; | ^ CANopenLinux/CO_driver.c:213:19: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 213 | rxArray[i].timestamp.tv_sec = 0; | ^ CANopenLinux/CO_driver.c:214:19: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 214 | rxArray[i].timestamp.tv_nsec = 0; | ^ CANopenLinux/CO_driver.c:219:58: error: request for member ‘can_ifindex’ in something not a structure or union 219 | ret = CO_CANmodule_addInterface(CANmodule, CANptrReal->can_ifindex); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_addInterface’: CANopenLinux/CO_driver.c:239:5: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 239 | CO_CANinterface_t* interface; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:241:12: error: variable ‘ev’ has initializer but incomplete type 241 | struct epoll_event ev = {0}; | ^~~~~~~~~~~ CANopenLinux/CO_driver.c:241:30: warning: excess elements in struct initializer 241 | struct epoll_event ev = {0}; | ^ CANopenLinux/CO_driver.c:241:30: note: (near initialization for ‘ev’) CANopenLinux/CO_driver.c:241:24: error: storage size of ‘ev’ isn’t known 241 | struct epoll_event ev = {0}; | ^~ CANopenLinux/CO_driver.c:252:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 252 | CANmodule->CANinterfaceCount++; | ^~ CANopenLinux/CO_driver.c:253:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 253 | CANmodule->CANinterfaces = realloc(CANmodule->CANinterfaces, | ^~ CANopenLinux/CO_driver.c:253:49: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 253 | CANmodule->CANinterfaces = realloc(CANmodule->CANinterfaces, | ^~ CANopenLinux/CO_driver.c:254:51: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 254 | ((CANmodule->CANinterfaceCount) * sizeof(*CANmodule->CANinterfaces))); | ^~ CANopenLinux/CO_driver.c:254:91: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 254 | ((CANmodule->CANinterfaceCount) * sizeof(*CANmodule->CANinterfaces))); | ^~ CANopenLinux/CO_driver.c:255:18: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 255 | if (CANmodule->CANinterfaces == NULL) { | ^~ CANopenLinux/CO_driver.c:259:27: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 259 | interface = &CANmodule->CANinterfaces[CANmodule->CANinterfaceCount - 1]; | ^~ CANopenLinux/CO_driver.c:259:52: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 259 | interface = &CANmodule->CANinterfaces[CANmodule->CANinterfaceCount - 1]; | ^~ CANopenLinux/CO_driver.c:261:14: error: request for member ‘can_ifindex’ in something not a structure or union 261 | interface->can_ifindex = can_ifindex; | ^~ CANopenLinux/CO_driver.c:262:51: error: request for member ‘ifName’ in something not a structure or union 262 | ifName = if_indextoname(can_ifindex, interface->ifName); | ^~ CANopenLinux/CO_driver.c:269:14: error: request for member ‘fd’ in something not a structure or union 269 | interface->fd = socket(PF_CAN, SOCK_RAW, CAN_RAW); | ^~ CANopenLinux/CO_driver.c:270:18: error: request for member ‘fd’ in something not a structure or union 270 | if (interface->fd < 0) { | ^~ CANopenLinux/CO_driver.c:277:31: error: request for member ‘fd’ in something not a structure or union 277 | ret = setsockopt(interface->fd, SOL_SOCKET, SO_RXQ_OVFL, &tmp, sizeof(tmp)); | ^~ CANopenLinux/CO_driver.c:285:31: error: request for member ‘fd’ in something not a structure or union 285 | ret = setsockopt(interface->fd, SOL_SOCKET, SO_TIMESTAMPING, &tmp, sizeof(tmp)); | ^~ CANopenLinux/CO_driver.c:298:25: error: request for member ‘fd’ in something not a structure or union 298 | getsockopt(interface->fd, SOL_SOCKET, SO_RCVBUF, (void*)&bytes, &sLen); | ^~ CANopenLinux/CO_driver.c:300:60: error: request for member ‘ifName’ in something not a structure or union 300 | log_printf(LOG_INFO, CAN_SOCKET_BUF_SIZE, interface->ifName, bytes / 446, bytes); | ^~ CANopenLinux/CO_driver.c:307:25: error: request for member ‘fd’ in something not a structure or union 307 | ret = bind(interface->fd, (struct sockaddr*)&sockAddr, sizeof(sockAddr)); | ^~ CANopenLinux/CO_driver.c:309:58: error: request for member ‘ifName’ in something not a structure or union 309 | log_printf(LOG_ERR, CAN_BINDING_FAILED, interface->ifName); | ^~ CANopenLinux/CO_driver.c:331:17: error: ‘EPOLLIN’ undeclared (first use in this function) 331 | ev.events = EPOLLIN; | ^~~~~~~ CANopenLinux/CO_driver.c:332:27: error: request for member ‘fd’ in something not a structure or union 332 | ev.data.fd = interface->fd; | ^~ CANopenLinux/CO_driver.c:333:11: warning: implicit declaration of function ‘epoll_ctl’ [-Wimplicit-function-declaration] 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~~~~~~~~ CANopenLinux/CO_driver.c:333:30: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~ CANopenLinux/CO_driver.c:333:42: error: ‘EPOLL_CTL_ADD’ undeclared (first use in this function) 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~~~~~~~~~~~~ CANopenLinux/CO_driver.c:241:24: warning: unused variable ‘ev’ [-Wunused-variable] 241 | struct epoll_event ev = {0}; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_disable’: CANopenLinux/CO_driver.c:356:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 356 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:357:9: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 357 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[i]; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:357:50: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 357 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[i]; | ^~ CANopenLinux/CO_driver.c:363:28: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~ CANopenLinux/CO_driver.c:363:40: error: ‘EPOLL_CTL_DEL’ undeclared (first use in this function) 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~~~~~~~~~~~~ CANopenLinux/CO_driver.c:363:64: error: request for member ‘fd’ in something not a structure or union 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~ CANopenLinux/CO_driver.c:364:24: error: request for member ‘fd’ in something not a structure or union 364 | close(interface->fd); | ^~ CANopenLinux/CO_driver.c:365:18: error: request for member ‘fd’ in something not a structure or union 365 | interface->fd = -1; | ^~ CANopenLinux/CO_driver.c:367:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 367 | CANmodule->CANinterfaceCount = 0; | ^~ CANopenLinux/CO_driver.c:368:18: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 368 | if (CANmodule->CANinterfaces != NULL) { | ^~ CANopenLinux/CO_driver.c:369:23: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 369 | free(CANmodule->CANinterfaces); | ^~ CANopenLinux/CO_driver.c:371:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 371 | CANmodule->CANinterfaces = NULL; | ^~ CANopenLinux/CO_driver.c:373:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 373 | if (CANmodule->rxFilter != NULL) { | ^~ CANopenLinux/CO_driver.c:374:23: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 374 | free(CANmodule->rxFilter); | ^~ CANopenLinux/CO_driver.c:376:14: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 376 | CANmodule->rxFilter = NULL; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANrxBufferInit’: CANopenLinux/CO_driver.c:397:15: error: ‘CO_CANrx_t’ has no member named ‘can_ifindex’ 397 | buffer->can_ifindex = 0; | ^~ CANopenLinux/CO_driver.c:398:15: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 398 | buffer->timestamp.tv_nsec = 0; | ^~ CANopenLinux/CO_driver.c:399:15: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 399 | buffer->timestamp.tv_sec = 0; | ^~ CANopenLinux/CO_driver.c:409:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 409 | CANmodule->rxFilter[index].can_id = buffer->ident; | ^~ CANopenLinux/CO_driver.c:410:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 410 | CANmodule->rxFilter[index].can_mask = buffer->mask; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANtxBufferInit’: CANopenLinux/CO_driver.c:467:15: error: ‘CO_CANtx_t’ has no member named ‘can_ifindex’ 467 | buffer->can_ifindex = 0; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANsend’: CANopenLinux/CO_driver.c:631:57: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 631 | if (CANmodule == NULL || buffer == NULL || CANmodule->CANinterfaceCount == 0) { | ^~ CANopenLinux/CO_driver.c:635:5: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 635 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[0]; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:635:46: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 635 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[0]; | ^~ CANopenLinux/CO_driver.c:636:39: error: request for member ‘fd’ in something not a structure or union 636 | if (interface == NULL || interface->fd < 0) { | ^~ CANopenLinux/CO_driver.c:645:72: error: request for member ‘ifName’ in something not a structure or union 645 | log_printf(LOG_ERR, DBG_CAN_TX_FAILED, buffer->ident, interface->ifName); | ^~ CANopenLinux/CO_driver.c:650:31: error: request for member ‘fd’ in something not a structure or union 650 | ssize_t n = send(interface->fd, buffer, CAN_MTU, MSG_DONTWAIT); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_process’: CANopenLinux/CO_driver.c:686:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 686 | if (CANmodule == NULL || CANmodule->CANinterfaceCount == 0) { | ^~ CANopenLinux/CO_driver.c: At top level: CANopenLinux/CO_driver.c:726:39: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 726 | CO_CANread(CO_CANmodule_t* CANmodule, CO_CANinterface_t* interface, | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:784:13: error: unknown type name ‘CO_CANrxMsg_t’; did you mean ‘CO_CANrx_t’? 784 | CO_CANrxMsg_t* buffer) /* If not NULL, msg will be copied to buffer */ | ^~~~~~~~~~~~~ | CO_CANrx_t CANopenLinux/CO_driver.c:824:70: error: unknown type name ‘CO_CANrxMsg_t’; did you mean ‘CO_CANrx_t’? 824 | xFromEpoll(CO_CANmodule_t* CANmodule, struct epoll_event* ev, CO_CANrxMsg_t* buffer, int32_t* msgIndex) { river.c:40:33: error: ‘PTHREAD_MUTEX_INITIALIZER’ undeclared here (not in a function) 40 | pthread_mutex_t CO_EMCY_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:41:1: error: unknown type name ‘pthread_mutex_t’ 41 | pthread_mutex_t CO_OD_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c: In function ‘disableRx’: CANopenLinux/CO_driver.c:95:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 95 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:96:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 96 | int ret = setsockopt(CANmodule->CANinterfaces[i].fd, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); | ^~ CANopenLinux/CO_driver.c:98:61: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 98 | log_printf(LOG_ERR, CAN_FILTER_FAILED, CANmodule->CANinterfaces[i].ifName); | ^~ CANopenLinux/CO_driver.c: In function ‘setRxFilters’: CANopenLinux/CO_driver.c:119:23: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 119 | if ((CANmodule->rxFilter[i].can_id != 0) || (CANmodule->rxFilter[i].can_mask != 0)) { | ^~ CANopenLinux/CO_driver.c:119:63: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 119 | if ((CANmodule->rxFilter[i].can_id != 0) || (CANmodule->rxFilter[i].can_mask != 0)) { | ^~ CANopenLinux/CO_driver.c:121:44: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 121 | rxFiltersCpy[count] = CANmodule->rxFilter[i]; | ^~ CANopenLinux/CO_driver.c:133:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 133 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:134:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 134 | int ret = setsockopt(CANmodule->CANinterfaces[i].fd, SOL_CAN_RAW, CAN_RAW_FILTER, rxFiltersCpy, | ^~ CANopenLinux/CO_driver.c:137:61: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 137 | log_printf(LOG_ERR, CAN_FILTER_FAILED, CANmodule->CANinterfaces[i].ifName); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_init’: CANopenLinux/CO_driver.c:178:5: error: unknown type name ‘CO_CANptrSocketCan_t’ 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:178:41: error: ‘CO_CANptrSocketCan_t’ undeclared (first use in this function) 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:178:41: note: each undeclared identifier is reported only once for each function it appears in CANopenLinux/CO_driver.c:178:62: error: expected expression before ‘)’ token 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^ CANopenLinux/CO_driver.c:181:14: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 181 | CANmodule->epoll_fd = CANptrReal->epoll_fd; | ^~ CANopenLinux/CO_driver.c:181:37: error: request for member ‘epoll_fd’ in something not a structure or union 181 | CANmodule->epoll_fd = CANptrReal->epoll_fd; | ^~ CANopenLinux/CO_driver.c:182:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 182 | CANmodule->CANinterfaces = NULL; | ^~ CANopenLinux/CO_driver.c:183:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 183 | CANmodule->CANinterfaceCount = 0; | ^~ CANopenLinux/CO_driver.c:201:14: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 201 | CANmodule->rxFilter = calloc(CANmodule->rxSize, sizeof(struct can_filter)); | ^~ CANopenLinux/CO_driver.c:202:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 202 | if (CANmodule->rxFilter == NULL) { | ^~ CANopenLinux/CO_driver.c:209:27: warning: conversion from ‘unsigned int’ to ‘uint16_t’ {aka ‘short unsigned int’} changes value from ‘4294967295’ to ‘65535’ [-Woverflow] 209 | rxArray[i].mask = 0xFFFFFFFFU; | ^~~~~~~~~~~ CANopenLinux/CO_driver.c:212:19: error: ‘CO_CANrx_t’ has no member named ‘can_ifindex’ 212 | rxArray[i].can_ifindex = 0; | ^ CANopenLinux/CO_driver.c:213:19: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 213 | rxArray[i].timestamp.tv_sec = 0; | ^ CANopenLinux/CO_driver.c:214:19: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 214 | rxArray[i].timestamp.tv_nsec = 0; | ^ CANopenLinux/CO_driver.c:219:58: error: request for member ‘can_ifindex’ in something not a structure or union 219 | ret = CO_CANmodule_addInterface(CANmodule, CANptrReal->can_ifindex); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_addInterface’: CANopenLinux/CO_driver.c:239:5: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 239 | CO_CANinterface_t* interface; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:241:12: error: variable ‘ev’ has initializer but incomplete type 241 | struct epoll_event ev = {0}; | ^~~~~~~~~~~ CANopenLinux/CO_driver.c:241:30: warning: excess elements in struct initializer 241 | struct epoll_event ev = {0}; | ^ CANopenLinux/CO_driver.c:241:30: note: (near initialization for ‘ev’) CANopenLinux/CO_driver.c:241:24: error: storage size of ‘ev’ isn’t known 241 | struct epoll_event ev = {0}; | ^~ CANopenLinux/CO_driver.c:252:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 252 | CANmodule->CANinterfaceCount++; | ^~ CANopenLinux/CO_driver.c:253:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 253 | CANmodule->CANinterfaces = realloc(CANmodule->CANinterfaces, | ^~ CANopenLinux/CO_driver.c:253:49: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 253 | CANmodule->CANinterfaces = realloc(CANmodule->CANinterfaces, | ^~ CANopenLinux/CO_driver.c:254:51: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 254 | ((CANmodule->CANinterfaceCount) * sizeof(*CANmodule->CANinterfaces))); | ^~ CANopenLinux/CO_driver.c:254:91: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 254 | ((CANmodule->CANinterfaceCount) * sizeof(*CANmodule->CANinterfaces))); | ^~ CANopenLinux/CO_driver.c:255:18: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 255 | if (CANmodule->CANinterfaces == NULL) { | ^~ CANopenLinux/CO_driver.c:259:27: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 259 | interface = &CANmodule->CANinterfaces[CANmodule->CANinterfaceCount - 1]; | ^~ CANopenLinux/CO_driver.c:259:52: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 259 | interface = &CANmodule->CANinterfaces[CANmodule->CANinterfaceCount - 1]; | ^~ CANopenLinux/CO_driver.c:261:14: error: request for member ‘can_ifindex’ in something not a structure or union 261 | interface->can_ifindex = can_ifindex; | ^~ CANopenLinux/CO_driver.c:262:51: error: request for member ‘ifName’ in something not a structure or union 262 | ifName = if_indextoname(can_ifindex, interface->ifName); | ^~ CANopenLinux/CO_driver.c:269:14: error: request for member ‘fd’ in something not a structure or union 269 | interface->fd = socket(PF_CAN, SOCK_RAW, CAN_RAW); | ^~ CANopenLinux/CO_driver.c:270:18: error: request for member ‘fd’ in something not a structure or union 270 | if (interface->fd < 0) { | ^~ CANopenLinux/CO_driver.c:277:31: error: request for member ‘fd’ in something not a structure or union 277 | ret = setsockopt(interface->fd, SOL_SOCKET, SO_RXQ_OVFL, &tmp, sizeof(tmp)); | ^~ CANopenLinux/CO_driver.c:285:31: error: request for member ‘fd’ in something not a structure or union 285 | ret = setsockopt(interface->fd, SOL_SOCKET, SO_TIMESTAMPING, &tmp, sizeof(tmp)); | ^~ CANopenLinux/CO_driver.c:298:25: error: request for member ‘fd’ in something not a structure or union 298 | getsockopt(interface->fd, SOL_SOCKET, SO_RCVBUF, (void*)&bytes, &sLen); | ^~ CANopenLinux/CO_driver.c:300:60: error: request for member ‘ifName’ in something not a structure or union 300 | log_printf(LOG_INFO, CAN_SOCKET_BUF_SIZE, interface->ifName, bytes / 446, bytes); | ^~ CANopenLinux/CO_driver.c:307:25: error: request for member ‘fd’ in something not a structure or union 307 | ret = bind(interface->fd, (struct sockaddr*)&sockAddr, sizeof(sockAddr)); | ^~ CANopenLinux/CO_driver.c:309:58: error: request for member ‘ifName’ in something not a structure or union 309 | log_printf(LOG_ERR, CAN_BINDING_FAILED, interface->ifName); | ^~ CANopenLinux/CO_driver.c:331:17: error: ‘EPOLLIN’ undeclared (first use in this function) 331 | ev.events = EPOLLIN; | ^~~~~~~ CANopenLinux/CO_driver.c:332:27: error: request for member ‘fd’ in something not a structure or union 332 | ev.data.fd = interface->fd; | ^~ CANopenLinux/CO_driver.c:333:11: warning: implicit declaration of function ‘epoll_ctl’ [-Wimplicit-function-declaration] 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~~~~~~~~ CANopenLinux/CO_driver.c:333:30: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~ CANopenLinux/CO_driver.c:333:42: error: ‘EPOLL_CTL_ADD’ undeclared (first use in this function) 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~~~~~~~~~~~~ CANopenLinux/CO_driver.c:241:24: warning: unused variable ‘ev’ [-Wunused-variable] 241 | struct epoll_event ev = {0}; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_disable’: CANopenLinux/CO_driver.c:356:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 356 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:357:9: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 357 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[i]; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:357:50: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 357 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[i]; | ^~ CANopenLinux/CO_driver.c:363:28: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~ CANopenLinux/CO_driver.c:363:40: error: ‘EPOLL_CTL_DEL’ undeclared (first use in this function) 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~~~~~~~~~~~~ CANopenLinux/CO_driver.c:363:64: error: request for member ‘fd’ in something not a structure or union 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~ CANopenLinux/CO_driver.c:364:24: error: request for member ‘fd’ in something not a structure or union 364 | close(interface->fd); | ^~ CANopenLinux/CO_driver.c:365:18: error: request for member ‘fd’ in something not a structure or union 365 | interface->fd = -1; | ^~ CANopenLinux/CO_driver.c:367:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 367 | CANmodule->CANinterfaceCount = 0; | ^~ CANopenLinux/CO_driver.c:368:18: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 368 | if (CANmodule->CANinterfaces != NULL) { | ^~ CANopenLinux/CO_driver.c:369:23: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 369 | free(CANmodule->CANinterfaces); | ^~ CANopenLinux/CO_driver.c:371:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 371 | CANmodule->CANinterfaces = NULL; | ^~ CANopenLinux/CO_driver.c:373:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 373 | if (CANmodule->rxFilter != NULL) { | ^~ CANopenLinux/CO_driver.c:374:23: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 374 | free(CANmodule->rxFilter); | ^~ CANopenLinux/CO_driver.c:376:14: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 376 | CANmodule->rxFilter = NULL; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANrxBufferInit’: CANopenLinux/CO_driver.c:397:15: error: ‘CO_CANrx_t’ has no member named ‘can_ifindex’ 397 | buffer->can_ifindex = 0; | ^~ CANopenLinux/CO_driver.c:398:15: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 398 | buffer->timestamp.tv_nsec = 0; | ^~ CANopenLinux/CO_driver.c:399:15: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 399 | buffer->timestamp.tv_sec = 0; | ^~ CANopenLinux/CO_driver.c:409:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 409 | CANmodule->rxFilter[index].can_id = buffer->ident; | ^~ CANopenLinux/CO_driver.c:410:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 410 | CANmodule->rxFilter[index].can_mask = buffer->mask; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANtxBufferInit’: CANopenLinux/CO_driver.c:467:15: error: ‘CO_CANtx_t’ has no member named ‘can_ifindex’ 467 | buffer->can_ifindex = 0; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANsend’: CANopenLinux/CO_driver.c:631:57: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 631 | if (CANmodule == NULL || buffer == NULL || CANmodule->CANinterfaceCount == 0) { | ^~ CANopenLinux/CO_driver.c:635:5: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 635 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[0]; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:635:46: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 635 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[0]; | ^~ CANopenLinux/CO_driver.c:636:39: error: request for member ‘fd’ in something not a structure or union 636 | if (interface == NULL || interface->fd < 0) { | ^~ CANopenLinux/CO_driver.c:645:72: error: request for member ‘ifName’ in something not a structure or union 645 | log_printf(LOG_ERR, DBG_CAN_TX_FAILED, buffer->ident, interface->ifName); | ^~ CANopenLinux/CO_driver.c:650:31: error: request for member ‘fd’ in something not a structure or union 650 | ssize_t n = send(interface->fd, buffer, CAN_MTU, MSG_DONTWAIT); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_process’: CANopenLinux/CO_driver.c:686:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 686 | if (CANmodule == NULL || CANmodule->CANinterfaceCount == 0) { | ^~ CANopenLinux/CO_driver.c: At top level: CANopenLinux/CO_driver.c:726:39: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 726 | CO_CANread(CO_CANmodule_t* CANmodule, CO_CANinterface_t* interface, | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:784:13: error: unknown type name ‘CO_CANrxMsg_t’; did you mean ‘CO_CANrx_t’? 784 | CO_CANrxMsg_t* buffer) /* If not NULL, msg will be copied to buffer */ | ^~~~~~~~~~~~~ | CO_CANrx_t CANopenLinux/CO_driver.c:824:70: error: unknown type name ‘CO_CANrxMsg_t’; did you mean ‘CO_CANrx_t’? 824 | xFromEpoll(CO_CANmodule_t* CANmodule, struct epoll_event* ev, CO_CANrxMsg_t* buffer, int32_t* msgIndex) {
10-26
OpenWrt-libtool: compile: aarch64-openwrt-linux-musl-gcc -DHAVE_CONFIG_H -I. -I./compat -I./include -I./include -I/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/staging_dir/target-aarch64-openwrt-linux-uclibc-be68_be77/usr/include -I/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/staging_dir/target-aarch64-openwrt-linux-uclibc-be68_be77/include -I/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/staging_dir/usr-be68_be77/include -I/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/../sdk/mtk798x/openwrt-21.02/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl/include -fpic -MT bufferevent_openssl.lo -MD -MP -MF .deps/bufferevent_openssl.Tpo -c bufferevent_openssl.c -fPIC -DPIC -o .libs/bufferevent_openssl.o bufferevent_openssl.c: In function 'bio_bufferevent_new': bufferevent_openssl.c:106:3: error: dereferencing pointer to incomplete type 'BIO' {aka 'struct bio_st'} b->init = 0; ^~ bufferevent_openssl.c: At top level: bufferevent_openssl.c:228:1: error: variable 'methods_bufferevent' has initializer but incomplete type static BIO_METHOD methods_bufferevent = { ^~~~~~ bufferevent_openssl.c:79:27: warning: excess elements in struct initializer #define BIO_TYPE_LIBEVENT 57 ^~ bufferevent_openssl.c:229:2: note: in expansion of macro 'BIO_TYPE_LIBEVENT' BIO_TYPE_LIBEVENT, "bufferevent", ^~~~~~~~~~~~~~~~~ bufferevent_openssl.c:79:27: note: (near initialization for 'methods_bufferevent') #define BIO_TYPE_LIBEVENT 57 ^~ bufferevent_openssl.c:229:2: note: in expansion of macro 'BIO_TYPE_LIBEVENT' BIO_TYPE_LIBEVENT, "bufferevent", ^~~~~~~~~~~~~~~~~ bufferevent_openssl.c:229:21: warning: excess elements in struct initializer BIO_TYPE_LIBEVENT, "bufferevent", ^~~~~~~~~~~~~ bufferevent_openssl.c:229:21: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:230:2: warning: excess elements in struct initializer bio_bufferevent_write, ^~~~~~~~~~~~~~~~~~~~~ bufferevent_openssl.c:230:2: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:231:2: warning: excess elements in struct initializer bio_bufferevent_read, ^~~~~~~~~~~~~~~~~~~~ bufferevent_openssl.c:231:2: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:232:2: warning: excess elements in struct initializer bio_bufferevent_puts, ^~~~~~~~~~~~~~~~~~~~ bufferevent_openssl.c:232:2: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:233:2: warning: excess elements in struct initializer NULL /* bio_bufferevent_gets */, ^~~~ bufferevent_openssl.c:233:2: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:234:2: warning: excess elements in struct initializer bio_bufferevent_ctrl, ^~~~~~~~~~~~~~~~~~~~ bufferevent_openssl.c:234:2: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:235:2: warning: excess elements in struct initializer bio_bufferevent_new, ^~~~~~~~~~~~~~~~~~~ bufferevent_openssl.c:235:2: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:236:2: warning: excess elements in struct initializer bio_bufferevent_free, ^~~~~~~~~~~~~~~~~~~~ bufferevent_openssl.c:236:2: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:237:2: warning: excess elements in struct initializer NULL /* callback_ctrl */, ^~~~ bufferevent_openssl.c:237:2: note: (near initialization for 'methods_bufferevent') bufferevent_openssl.c:228:19: error: storage size of 'methods_bufferevent' isn't known static BIO_METHOD methods_bufferevent = { ^~~~~~~~~~~~~~~~~~~ Makefile:766: recipe for target 'bufferevent_openssl.lo' failed make[6]: *** [bufferevent_openssl.lo] Error 1 make[6]: Leaving directory '/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/build_dir/target-aarch64-openwrt-linux-uclibc-be68_be77/libevent-2.0.21-stable' Makefile:824: recipe for target 'all-recursive' failed make[5]: *** [all-recursive] Error 1 make[5]: Leaving directory '/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/build_dir/target-aarch64-openwrt-linux-uclibc-be68_be77/libevent-2.0.21-stable' Makefile:569: recipe for target 'all' failed make[4]: *** [all] Error 2 make[4]: Leaving directory '/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/build_dir/target-aarch64-openwrt-linux-uclibc-be68_be77/libevent-2.0.21-stable' Makefile:153: recipe for target '/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/build_dir/target-aarch64-openwrt-linux-uclibc-be68_be77/libevent-2.0.21-stable/.built' failed make[3]: *** [/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/build_dir/target-aarch64-openwrt-linux-uclibc-be68_be77/libevent-2.0.21-stable/.built] Error 2 make[3]: Leaving directory '/home/soho/code/be67/iplatform/board/model_mtk_mt798x/openwrt/package/libevent2' package/Makefile:13 openssl是1.1.1w,libevent2是2.0.19.怎么解决,给出详细处理方法
最新发布
11-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值