我正在尝试使用 winsock2 库,我正在使用它从 open62541
编译教程服务器我使用并出错的一些代码(来自合并构建的 open62541.c):
#include <winsock2.h>
#include <Windows.h>
#INCLUDE <ws2tcpip.h>
int main(){
struct pollfd tmp_poll_fd;
}
我正在使用 mingw 编译 open62541 服务器,并按照tutorial
gcc -std=c99 server.c open62541.c -lws2_32 -o server.exe
错误:
error: storage size of 'tmp_poll_fd' isn't known
struct pollfd tmp_poll_fd;
其他错误也与 winsock2 库有关,例如
POLLWRNORM undeclared
我已经检查过 winsock2.h 就位了,
我也检查里面的winsock2.h包含
struct pollfd
和POLLWRNORM
我已经尝试在 gcc 命令中进行一些更改,例如:
gcc -std=c99 server.c open62541.c -libws2_32 -o server.exe
有办法解决这个问题吗?
免责声明:此答案是基于我本地安装的MinGW版本(8.1.0,由MinGW-W64项目构建),您的情况可能有所不同。
包含文件“winsock2.h”对目标Windows版本有保护:
#if (_WIN32_WINNT >= 0x0600)
/* ... */
typedef struct pollfd {
/* ... */
#endif /*(_WIN32_WINNT >= 0x0600)*/
宏
_WIN32_WINNT
由“_mingw.h”设置为0x502,如果不通过其他方式更改它:
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x502
#endif
根据 Microsoft 的文档,值 0x502 表示“Windows Server 2003”。如果您将宏设置为大于或等于 0x600(“Windows Vista”)的值,您的编译将成功:
#define _WIN32_WINNT 0x600
#include <winsock2.h>
#include <windows.h>
#include <ws2tcpip.h>
int main(void) {
struct pollfd tmp_poll_fd;
}