【C工具】【libevent】一、win+msys2环境下的安装

发布时间:2024年01月24日

最容易的方法是使用msys2或者cygwin这些,并不需要自己编译什么的
我的环境是win10+msys2

  • 包管理器更新
pacman -Syu
  • gcc工具链安装
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
  • libevent安装
pacman -S mingw-w64-x86_64-libevent
  • 完成!!enjoy!!

  • 其他注意事项1:

    • windows下或许要如下添加代码,否则可能会有这个错误:[warn] evsig_init_: socketpair: 应用程序没有调用 WSAStartup,或者 WSAStartup 失败
#ifdef WIN32
#include <winsock2.h>  //这个放在windows.h前面
#endif

int main()
{
#ifdef WIN32
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        fprintf(stderr, "Failed to initialize Winsock\n");
        return 1;
    }
#endif

    // 在这里添加你的libevent代码

#ifdef WIN32
    WSACleanup();
#endif

    return 0;
}
  • 其他注意事项2:
    • 编译的时候注意添加这两个库,cmake的示例:
target_link_libraries(timer_example event Ws2_32)
  • 一个测试程序:
#include <stdio.h>
#ifdef WIN32
#include <winsock2.h>
#endif
#include <windows.h>
#include <event2/event.h>

void event_cb(evutil_socket_t fd, short events, void *arg)
{
    // 处理事件回调函数
    printf("test\n");
}
int main(int argc, char *argv[]) {
#ifdef WIN32
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        fprintf(stderr, "Failed to initialize Winsock\n");
        return 1;
    }
#endif
    struct event_base *base = event_base_new();
    struct event *ev = event_new(base, -1, EV_TIMEOUT, event_cb, NULL);
    struct timeval tv = {1, 0};
    
    event_add(ev, &tv);
    event_base_dispatch(base);
    
    event_free(ev);
    event_base_free(base);
    
#ifdef WIN32
    WSACleanup();
#endif
    return 0;
}
文章来源:https://blog.csdn.net/a1058191679/article/details/135827651
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。