场景
在应用VS编译RabbitMQ examples目录下的amqp_comsumer.c文件,出现如上的问题,调用amqp_consume_message函数指定超时时间
struct timeval tvTimeout;
tvTimeout.tv_sec = 1;
tvTimeout.tv_usec = 0;
ret = amqp_consume_message(conn, &envelope, &tvTimeout, 0);
解决方案
包含头文件#include <winsock.h>
或者
包含头文件#include <WinSock2.h>
声明结构体代码
/*
* Structure used in select() call, taken from the BSD file sys/time.h.
*/
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* and microseconds */
};
从注释可以看出,在Linux开发环境中,需要包含sys/time.h头文件
解决过程记录
1)网上提示添加#include <time.h>,但是通过Everything工具,搜索到的time.h头文件都没有相关的定义
2)网上提示添加头文件#include <windows.h>,在某些环境下,添加头文件还是会出现上述的情况,这种情况下,可以在包含文件下,添加如下声明extern struct timeval;
3) 根据VAssistX工具的提示,跳转到头文件winsock.h,根据Everything搜索,一共找到两个文件 C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\winsock.h C:\Program Files (x86)\Windows Kits\8.1\Include\um\winsock.h 所以只需要在调用该结构体的时候,添加#include <winsock.h> 解决问题