使用未定义的 struct “timeval” 解决方案
  3cAxQ5E22S4z 2023年12月01日 15 0

场景

    在应用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> 解决问题

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月01日 0

暂无评论

3cAxQ5E22S4z