嵌入式技术论坛
直播中

李娜

7年用户 1617经验值
私信 关注
[问答]

使用lwip协议栈和mymqtt软件包编译报错怎么办?

野火stm32f407开发板,rt thread studio开发环境,lwip协议栈使用2.1.2,mymqtt选择latest。编译,报错:dfs_posix.h: No such file or directory,屏蔽掉头文件。

编译,仍然报错,报错提示

lwip-2.1.2\src\include/lwip/sockets.h:651:64: error: conflicting types for 'lwip_select'
目前的解决办法是,屏蔽掉当前文件中的lwip_select函数。
编译,提示warn,有重复定义,

\rt-thread\components\libc\compilers\common\include/sys/select.h:48:0: warning: "FD_SET" redefined

回帖(1)

mintsy

2023-4-20 15:54:54
解决办法:修改rt-thread\components\libc\compilers\common\include\sys\select.h文件内容,修改如下

#ifndef __SYS_SELECT_H__
#define __SYS_SELECT_H__
#include
#include
#include
#if 1
#include
#else
#ifdef __cplusplus
extern "C" {
#endif
#ifndef  FD_SETSIZE
#define  FD_SETSIZE  32
#endif
#ifdef SAL_USING_POSIX
#ifdef FD_SETSIZE
#undef FD_SETSIZE
#endif
#define FD_SETSIZE      DFS_FD_MAX
#endif /* SAL_USING_POSIX */
typedef long    fd_mask;
#ifndef _SYS_TYPES_FD_SET /* Newlib 2.2.0 or lower version */
#define   NBBY    8       /* number of bits in a byte */
#define   NFDBITS (sizeof (fd_mask) * NBBY)   /* bits per mask */
#ifndef   howmany
#define   howmany(x,y)    (((x)+((y)-1))/(y))
#endif /* howmany */
typedef struct _types_fd_set {
    fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
} _types_fd_set;
#define fd_set _types_fd_set
#define FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))
#define FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))
#define FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS)))
#define FD_ZERO(p)      rt_memset((void*)(p), 0, sizeof(*(p)))
#endif /* _SYS_TYPES_FD_SET */
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
#ifdef __cplusplus
}
#endif
#endif
举报

更多回帖

发帖
×
20
完善资料,
赚取积分