精华内容
下载资源
问答
  • libevent交叉编译

    2020-07-20 11:20:45
    libevent交叉编译 正常编译 解压 tar zxvf libevent-2.0.10-stable.tar.gz 进入目录 cd libevent-2.0.10-stable 设置安装路径 ./configure –prefix=/usr 编译 make 安装 make install 坑: 默认是安装到/usr/...

    libevent交叉编译

    正常编译

    1. 解压
      tar zxvf libevent-2.0.10-stable.tar.gz
    2. 进入目录
      cd libevent-2.0.10-stable
    3. 设置安装路径
      ./configure --prefix=/usr
    4. 编译
      make
    5. 安装
      make install

    坑:

    1. 默认是安装到/usr/local下的,程序执行时找不到包,可在CmakeLists.txt中修改三方包的路径

    交叉编译

    1. 解压
      tar zxvf libevent-2.0.10-stable.tar.gz
    2. 进入目录
      cd libevent-2.0.10-stable
    3. 设置安装路径, arm环境命令,根据机器类型替换相应参数
      ./configure --prefix=/home/arm/libevent --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++
    4. 编译
      make
    5. 安装
      make install
    6. arm移植
      将/home/arm/libevent平移到arm环境即可

    CmakeLists.txt配置

    cmake_minimum_required(VERSION 2.8.4)
    project(test_lib)
    
    set(CMAKE_CXX_STANDARD 14)
    
    set(INC_DIR /home/arm/libevent/include)
    set(LINK_DIR /home/arm/libevent/lib)
    
    include_directories(${INC_DIR})
    link_directories(${LINK_DIR})
    
    link_libraries(event)
    
    add_executable(test_lib main.cpp)
    
    target_link_libraries(test_lib event)
    
    展开全文
  • libevent ios编译脚本

    2017-12-28 11:02:23
    libevent 在ios交叉编译脚本,支持IOS各种架构(包含MACOS)
  • libevent android编译脚本

    2017-12-28 10:57:57
    libevent 在android上交叉编译脚本,支持各种系统架构
  • Libevent2.0.21编译好的库,三个lib,libevent.lib,libevent_core.lib,libevent_extras.lib
  • 1、下载地址 http://libevent.org/ ...libevent默认编译的是release版本的,如果需要编译debug版本的,修改一下makefile.nmake: #CFLAGS=$(CFLAGS) /Ox /W3 /wd4996 /nologo 修改为: #CFLAGS=$(CFLAGS) /D_...

    1、下载地址

    http://libevent.org/

    2、编译版本

    libevent-2.1.8-stable.tar.gz
    

    3、编译说明

    libevent默认编译的是release版本的,如果需要编译debug版本的,修改一下makefile.nmake:

    #CFLAGS=$(CFLAGS) /Ox /W3 /wd4996 /nologo
    修改为:
    #CFLAGS=$(CFLAGS) /D_DEBUG /Od /W3 /wd4996 /nologo
    

    编译x64版本需要修改Makefile.nmake,LIBFLAGS的值后面追加/MACHINE:X64

    如果想支持SSL,编辑Makefile.nmake文件,取消OPENSSL_DIR定义的注释,将其配置为正确的OpenSSL库地址

    全量编译:nmake /f Makefile.nmake [all] //all可以省略,默认是all
    库编译: nmake /f Makefile.nmake static_libs
    测试编译:nmake /f Makefile.nmake tests
    清理输出:nmake /f Makefile.nmake clean
    注:若全量编译,由于缺少文件test/print_winsock_errors.c,会报fatal error U1073: 不知道如何生成“print-winsock-errors.obj”错误,若只是需要库直接调用nmake /f Makefile.nmake static_libs即可

    4、错误修改

    1)在以下3个文件开头添加“#define _WIN32_WINNT 0x0500”
    libevent-2.0.21-stable\event_iocp.c
    libevent-2.0.21-stable\evthread_win32.c
    libevent-2.0.21-stable\listener.c
    2)对test\regress_http.c文件3611,3655行修改

    struct http_server hs = { .port = 0, .ssl = ssl, }; 
    改为
    struct http_server hs = { 0, ssl, };
    

    5、编译过程

    1)以管理员权限打开Visual Studio X64兼容命令提示(2010),非管理员权限可能会报错;
    2)进入解压的libevent文件下,输入 nmake /f Makefile.nmake static_libs命令进行编译

    6、VS使用中的问题

    1、报错:fatal error C1083: 无法打开包括文件:“event2/event-config.h”
    库文件路径配置错误,路径应为event2文件上一级路径
    2、报错:error LNK2001: 无法解析的外部符号 _evbuffer_new
    1)编译的库文件是64位的,在win32下编译会报错,使用x64编译即可
    2)编译库文件与代码的运行库不同也可能导致调用库函数失败,可在库编译时CFLAGS加上 /MT或/MD

    展开全文
  • libevent windows编译

    2018-07-17 14:44:04
    2.打开vs命令行工具进入libevent-2.1.8-stable目录下执行nmake ./Makefile.nmake 只要三个libevent.lib,libevent_core.lib,libevent_extras.lib编译出来即可 下面的命令也可 全量编译:nmake /f Makefile.nmake ...

    1.官网下载http://libevent.org/最新源码
    2.打开vs命令行工具进入libevent-2.1.8-stable目录下执行nmake  ./Makefile.nmake  只要三个libevent.lib,libevent_core.lib,libevent_extras.lib编译出来即可
    下面的命令也可
    全量编译:nmake /f Makefile.nmake [all] //all可以省略,默认是all
    库编译:  nmake /f Makefile.nmake static_libs
    测试编译:nmake /f Makefile.nmake tests
    清理输出:nmake /f Makefile.nmake clean
    3.添加静态lib库和include头文件,头文件要把WIN32-Code下的event-config.h包含进去即可。
    服务端源码:
    #include <stdio.h>
    #include <time.h>
    #include <event2/bufferevent.h>
    #include <event2/buffer.h>
    #include <event2/listener.h>
    #include <event2/util.h>
    #include <event2/event.h>
    #pragma comment(lib,"ws2_32.lib")
    const int PORT = 2500;
    const int BUFFER_SIZE = 1024;

    void listener_cb(struct evconnlistener *, evutil_socket_t,
        struct sockaddr *, int socklen, void *);
    void conn_writecb(struct bufferevent *, void *);
    void conn_readcb(struct bufferevent *, void *);
    void conn_eventcb(struct bufferevent *, short, void *);
    void delay(int ms);

    int main(int argc, char **argv)
    {
        printf("I am server\n");
    #ifdef WIN32
        WSAData wsaData;
        WSAStartup(MAKEWORD(2, 0), &wsaData);
    #endif
        struct sockaddr_in sin;
        memset(&sin, 0, sizeof(sin));
        sin.sin_family = AF_INET;
        sin.sin_port = htons(PORT);

        struct evconnlistener *listener;
        struct event_base *base = event_base_new();
        if (!base)
        {
            printf("Could not initialize libevent\n");
            return 1;
        }
        listener = evconnlistener_new_bind(base, listener_cb, (void *)base,
            LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, -1,
            (struct sockaddr*)&sin,
            sizeof(sin));

        if (!listener)
        {
            printf("Could not create a listener\n");
            return 1;
        }

        event_base_dispatch(base);
        evconnlistener_free(listener);
        event_base_free(base);

        printf("done\n");
        return 0;
    }

    void listener_cb(struct evconnlistener *listener, evutil_socket_t fd,
        struct sockaddr *sa, int socklen, void *user_data)
    {
        printf("Detect an connection\n");
        struct event_base *base = (struct event_base *)user_data;
        struct bufferevent *bev;

        bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
        if (!bev)
        {
            printf("Could not create a bufferevent\n");
            event_base_loopbreak(base);
            return;
        }
        bufferevent_setcb(bev, conn_readcb, conn_writecb, conn_eventcb, NULL);
        bufferevent_enable(bev, EV_READ | EV_WRITE);
        //服务器监听到连接时,给客户端发送第一条消息
        char *reply_msg = "I receive a message from server";
        bufferevent_write(bev, reply_msg, strlen(reply_msg));
    }

    //conn_writecwritecb函数将在bufferevent中的output evbuffer缓冲区发送完成后被调用。
    //此时evbuffer_get_length(output) = 0,说明output evbuffer缓冲区被清空。
    //假设发现有10000条记录要发送出去,1次发送10000条将占用大量内存,所以,我们要分批发送
    //先发送100条数据,假设每条数据为1024字节bufferevent_write(bev,buf,1024 *100);
    //系统在这100条记录发送完成后将调用conn_writecbb回调函数,然后在该函数中循环发送剩下的
    //数据
    void conn_writecb(struct bufferevent *bev, void *user_data)
    {
        //    struct evbuffer *output = bufferevent_get_output(bev);
        //    if (evbuffer_get_length(output) == 0)
        //    {
        //        printf("Output evbuffer is flushed\n");
        //        bufferevent_free(bev);
        //    }
        //delay 1 second
        delay(1000);
        static int msg_num = 1;
        char reply_msg[1000] = { '\0' };
        char *str = "I receive a message from server ";
        memcpy(reply_msg, str, strlen(str));
        sprintf(reply_msg + strlen(str), "%d", msg_num);
        bufferevent_write(bev, reply_msg, strlen(reply_msg));
        msg_num++;
    }

    void conn_readcb(struct bufferevent *bev, void *user_data)
    {
        struct evbuffer *input = bufferevent_get_input(bev);
        size_t sz = evbuffer_get_length(input);
        if (sz > 0)
        {
            char msg[BUFFER_SIZE] = { '\0' };
            bufferevent_read(bev, msg, sz);
            printf("%s\n", msg);
        }
    }

    void conn_eventcb(struct bufferevent *bev, short events, void *user_data)
    {
        if (events & BEV_EVENT_EOF)
        {
            printf("Connection closed\n");
        }
        else if (events & BEV_EVENT_ERROR)
        {
            printf("Got an error on the connection: %s\n", strerror(errno));
        }

        bufferevent_free(bev);
    }

    void delay(int ms)
    {
        clock_t start = clock();
        while (clock() - start < ms);
    }

    客户端找个网络调试工具进行连接即可

    展开全文
  • windows下libevent VS2012编译

    千次阅读 2013-12-01 17:23:34
    上下载最先的libevent压缩包。 源文件有个问题,evutil.c源码修改这部分  #ifdef WIN32 #include #include #pragma comment(lib,"ws2_32.lib") #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_...

    首先在http://libevent.org/上下载最先的libevent压缩包。

    源文件有个问题,evutil.c源码修改这部分 

    #ifdef WIN32
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #pragma comment(lib,"ws2_32.lib") 
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #undef WIN32_LEAN_AND_MEAN
    #include <io.h>
    #include <tchar.h>
    #endif

    不然使用会失败;

    打开VS2012开发工具命令行,cd 到libevent目录;

    键入 

    nmake /f Makefile.nmake

    完成编译,生成libevent_core.lib libevent_extras.lib libevent.lib。

    新建VS工程,把lib加入链接器路径,libevent文件夹下的include文件夹拷贝过来,加入C++文件路径,并把libevent文件夹下的WIN32-Code\event2\event-config.h拷贝到include文件夹下,这样就ok了。

    运行sample的代码:

    /*
      This exmple program provides a trivial server program that listens for TCP
      connections on port 9995.  When they arrive, it writes a short message to
      each client connection, and closes each connection once it is flushed.
    
      Where possible, it exits cleanly in response to a SIGINT (ctrl-c).
    */
    
    #include <string.h>
    #include <errno.h>
    #include <stdio.h>
    #include <signal.h>
    #ifndef WIN32
    #include <netinet/in.h>
    # ifdef _XOPEN_SOURCE_EXTENDED
    #  include <arpa/inet.h>
    # endif
    #include <sys/socket.h>
    #endif
    
    #include <event2/bufferevent.h>
    #include <event2/buffer.h>
    #include <event2/listener.h>
    #include <event2/util.h>
    #include <event2/event.h>
    
    static const char MESSAGE[] = "Hello, World!\n";
    
    static const int PORT = 9995;
    
    static void listener_cb(struct evconnlistener *, evutil_socket_t,
        struct sockaddr *, int socklen, void *);
    static void conn_writecb(struct bufferevent *, void *);
    static void conn_eventcb(struct bufferevent *, short, void *);
    static void signal_cb(evutil_socket_t, short, void *);
    
    int
    main(int argc, char **argv)
    {
    	struct event_base *base;
    	struct evconnlistener *listener;
    	struct event *signal_event;
    
    	struct sockaddr_in sin;
    #ifdef WIN32
    	WSADATA wsa_data;
    	WSAStartup(0x0201, &wsa_data);
    #endif
    
    	base = event_base_new();
    	if (!base) {
    		fprintf(stderr, "Could not initialize libevent!\n");
    		return 1;
    	}
    
    	memset(&sin, 0, sizeof(sin));
    	sin.sin_family = AF_INET;
    	sin.sin_port = htons(PORT);
    
    	listener = evconnlistener_new_bind(base, listener_cb, (void *)base,
    	    LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE, -1,
    	    (struct sockaddr*)&sin,
    	    sizeof(sin));
    
    	if (!listener) {
    		fprintf(stderr, "Could not create a listener!\n");
    		return 1;
    	}
    
    	signal_event = evsignal_new(base, SIGINT, signal_cb, (void *)base);
    
    	if (!signal_event || event_add(signal_event, NULL)<0) {
    		fprintf(stderr, "Could not create/add a signal event!\n");
    		return 1;
    	}
    
    	event_base_dispatch(base);
    
    	evconnlistener_free(listener);
    	event_free(signal_event);
    	event_base_free(base);
    
    	printf("done\n");
    	return 0;
    }
    
    static void
    listener_cb(struct evconnlistener *listener, evutil_socket_t fd,
        struct sockaddr *sa, int socklen, void *user_data)
    {
    	struct event_base *base = (event_base *)user_data;
    	struct bufferevent *bev;
    
    	bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
    	if (!bev) {
    		fprintf(stderr, "Error constructing bufferevent!");
    		event_base_loopbreak(base);
    		return;
    	}
    	bufferevent_setcb(bev, NULL, conn_writecb, conn_eventcb, NULL);
    	bufferevent_enable(bev, EV_WRITE);
    	bufferevent_disable(bev, EV_READ);
    
    	bufferevent_write(bev, MESSAGE, strlen(MESSAGE));
    }
    
    static void
    conn_writecb(struct bufferevent *bev, void *user_data)
    {
    	struct evbuffer *output = bufferevent_get_output(bev);
    	if (evbuffer_get_length(output) == 0) {
    		printf("flushed answer\n");
    		bufferevent_free(bev);
    	}
    }
    
    static void
    conn_eventcb(struct bufferevent *bev, short events, void *user_data)
    {
    	if (events & BEV_EVENT_EOF) {
    		printf("Connection closed.\n");
    	} else if (events & BEV_EVENT_ERROR) {
    		//printf("Got an error on the connection: %s\n", strerror(errno));/*XXX win32*/
    	}
    	/* None of the other events can happen here, since we haven't enabled
    	 * timeouts */
    	bufferevent_free(bev);
    }
    
    static void
    signal_cb(evutil_socket_t sig, short events, void *user_data)
    {
    	struct event_base *base = (event_base *)user_data;
    	struct timeval delay = { 2, 0 };
    
    	printf("Caught an interrupt signal; exiting cleanly in two seconds.\n");
    
    	event_base_loopexit(base, &delay);
    }

    ok,没问题!
    展开全文
  • libevent android编译

    2021-02-24 18:23:55
    libevent版本 libevent-2.0.22-stable 下载地址 https://github.com/libevent/libevent/archive/release-2.0.22-stable.tar.gz cd/usr/local/libevent-2.0.22-stable 1. 生成event-config.h SYSROOT=/usr/...
  • libevent编译2

    2019-05-24 14:57:21
    先要将其依赖的库编译好,其中openssl需要编译libevent中,编译libevent_openssl.lib库,zlib在新版本中只有示例用到。 1)windows 平台使用 VS2017 编译 openssl 源码 参考前面的文章 openssl 默认编译到 C:...
  • 编译libevent遇到编译错误

    千次阅读 2019-10-08 16:04:36
    e:\github\libevent-2.1.11-stable\minheap-internal.h(76) : error C2065: “UINT32_MAX”: 未声明的标识符 在该文件中添加#include “stdint.h”
  • Libevent编译与使用

    2016-01-27 19:42:00
    Libevent编译与使用 Libevent官网:http://libevent.org/ ...编译环境:windows 7 + VS2010 (1)解压libevent到F:\libevent\libevent-2.0.21-stable (2)打开Microsoft visual studio 2010...
  • win10+cmake+vs2019编译64位libevent

    万次阅读 2021-01-31 12:33:00
    win10+cmake+vs2019编译64位libevent 概要: 使用平台:win10_64位 使用工具:cmake、vs2019 目的:在windows下编译libevent的库文件 可以实现任意版本的libevent手动编译 工具依赖 1.libevent下载,下载链接: ...
  • libevent windows 编译

    千次阅读 2013-07-09 09:23:06
    [文章作者:张宴 本文版本:v1.0 最后修改... 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP
  • libevent2编译

    2012-01-16 16:35:00
    1. 下载 libevent.org 2. 配置 ...tar xf libevent.tar.gzcd libevent./configure --prefix=/usrmakemake install ...3. 单独编译sample gcc -g -Wall -o hello hello-world.c -levent -I/usr/include -L/usr...
  • vs编译libevent 可调试

    2015-11-19 20:52:32
    vs2008编译libevent项目,根据源代码中makefile.nmake创建,用于调试 libevent版本:libevent-2.0.22
  • libevent 编译

    2019-06-05 09:54:05
    1.下载源码 github:...在libevent源码目录建立文件夹:BuildVs2010_x64 2.打开CMake 3.BuildVs2010_x64 下此时生成了vs2010的解决方案。然后编译生成就ok NOTE:如果上述报SSL错,请安转Op...
  • libevent 2.1.8 编译常见错误

    千次阅读 2018-09-04 10:33:55
    最近想做一个HttpServer,其实我找了很多开源库,昨天搞了一晚上的libcurl,感觉太繁重了,后来很多人都推荐用libevent,于是想搞一下。 libevent官网下载最新的libevent-2.1.8-stable.tar,地址:...
  • libevent编译

    2021-04-03 20:01:46
    1 zlibc编译 2、libevent编译 nmake /f Makefile.nmake 解决办法 ---------------------------、
  • 下载编译ios版libevent脚本 下载链接为:https://github.com/szuwest/libevent_ios 下载README.md文件 3.新建sh脚本将README.md拷贝入sh 将编译脚本sh放入 libevent-2.1.8-stable文件夹 5.终端到...
  • libeventvs编译工程

    2015-01-10 21:56:31
    前段时间看了下libevent的文档,把代码搞过来看了一下,做了一个vs的工程,花了一两个小时。免得下次又弄这些无谓的工作,上传到共享里。有需要的朋友也可以省点时间。工程是vs2008的,到其他版本也是可以使用的。
  • 1.编译 可以从github下载libevent的压缩包,解压后 修改以下三个文件,添加宏定义: 在以下3个文件开头添加“#define _WIN32_WINNT 0x0500” libevent-2.0.21-stable\event_iocp.c libevent-2.0.21-stab...
  • 在网上找了个例子,其实libevent本身带了很多测试用例,不过这是第一次编译成功,尼玛 各种高性能IO库都是在linux下的,win32果断被bs了,还好有libevent对win32支持的比较好。lib很顺利的编译好了。 下面就是很...
  • 准备工作: 1、Perl 建议使用5.30以上版本,本人在使用时发现28的版本好像在配置openssl的时候有问题。...安装后打开vs编译环境(我编译的是vs2010) 验证perl和nasm是否安装成功 编译openssl 进入openssl-1.0.2j目录
  • VS2005下编译LibEvent2.0.1.7版本通过
  • Linux之libevent编译&测试

    千次阅读 2015-11-30 23:53:03
    1.下载 http://download.csdn.net/detail/sauphy/9314091 2. 编译 ./configure --prefix=/opt/libevent make make install 3. 开发编译 gcc test_signal.c -o ok -I/opt/libevent/include -L/opt/libevent/li

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,805
精华内容 6,322
关键字:

libeventvs编译