博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libevent2笔记(linux、windows、android的编译)
阅读量:7235 次
发布时间:2019-06-29

本文共 3471 字,大约阅读时间需要 11 分钟。

0. 前言

我使用的版本是libevent-2.0.21-stable。高级的应用还是得看官网文档

1. 功能总结

libevent的核心作用是实现消息循环、消息队列管理与回调,可用来监听文件(socket也算文件)属性变化、超时、锁状态变化,其中超时可以用作Timer。
额外的功能是作为HTTP的server或client。

2. 编译

2.1 Linux版编译

在目录下

./configure && make
即可在./.lib/下得到5个.a静态库。 不确定是否在此之前我已安装好各种依赖库所以没遇到任何障碍。

liuhx@uc ~/Downloads/libevent-2.0.21-stable/.libs $ ll *.a-rw-r--r-- 1 liuhx liuhx 2309114 Feb 17 13:38 libevent.a-rw-r--r-- 1 liuhx liuhx 1431730 Feb 17 13:38 libevent_core.a-rw-r--r-- 1 liuhx liuhx  877456 Feb 17 13:38 libevent_extra.a-rw-r--r-- 1 liuhx liuhx  195868 Feb 17 13:38 libevent_openssl.a-rw-r--r-- 1 liuhx liuhx   21998 Feb 17 13:38 libevent_pthreads.a
查看Makefile文件的内容,可得知4个静态库对应的源文件:

CORE_SRC = event.c evthread.c buffer.c \	bufferevent.c bufferevent_sock.c bufferevent_filter.c \	bufferevent_pair.c listener.c bufferevent_ratelim.c \	evmap.c	log.c evutil.c evutil_rand.c strlcpy.c $(SYS_SRC)EXTRA_SRC = event_tagging.c http.c evdns.c evrpc.clibevent_pthreads_la_SOURCES = evthread_pthread.clibevent_openssl_la_SOURCES = bufferevent_openssl.c
即libevent_core.a里是核心功能,其中$(SYS_SRC)在各个平台会不同,linux下是select.c、poll.c、epoll.c、signal.c等,windows下是win32select.c evthread_win32.c等,不一一列举了。libevent_extra.a里包含http、dns等功能。另外两个libevent_*.a就见名知意了。而libevent.a是libevent_core.a和libevent_extra.a的集合。

2.2 Windows版编译

可以用VS的Command Prompt(开始菜单->Visual Studio 2013->Visual Studio Tools->VS2013 x64 Native Tools Command Prompt,VS和CPU版本应对应到你所用的)在libevent目录下

nmake Makefile.nmake
就能得到

2015/02/26  10:40           336,040 libevent_extras.lib2015/02/26  10:40           789,110 libevent.lib2015/02/26  10:40           453,366 libevent_core.lib
3个静态库文件。

不过一般会习惯做成VS工程。所以新建一个VS静态库工程,对着Makefile.nmake的内容添加源文件、引用目录、预编译命令就行了。vcproj的部分内容如下:

windows平台在链接时需要加入ws2_32.lib和wsock32.lib

2.3 Android版编译

若是能看懂linux和windows的Makefile,那是很容易写好Android.mk的。但在此之前需要生成好android版的config.h和event-config.h。

目录下运行(ndk版本随意,请替换成对应的路径):

SYSROOT=~/Applications/android-ndk-r8e/platforms/android-8/arch-arm./configure --host=arm-linux-androideabi CC=~/Applications/android-ndk-r8e/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc CFLAGS=--sysroot=$SYSROOT

这样就会生成好config.h了。然后再

make
过程中会调用sed修改好event-config.h。顺利的话会生成四个.a

liuhx@uc ~/Downloads/libevent-2.0.21-stable/.libs $ ll *.a-rw-r--r-- 1 liuhx liuhx 455082 Feb 26 14:59 libevent.a-rw-r--r-- 1 liuhx liuhx 267398 Feb 26 14:59 libevent_core.a-rw-r--r-- 1 liuhx liuhx 187756 Feb 26 14:59 libevent_extra.a-rw-r--r-- 1 liuhx liuhx   4014 Feb 26 14:59 libevent_pthreads.a
因为没有编译OpenSSL,所以不会有libevent_openssl.a。

前面的过程会弄好config.h和event-config.h,其中event-config.h是对应android版本的配置,是必须的,不然编不过,所以无法一上来就用Android.mk。过了make这一步才行,也就是要保留修改过的event-config.h来使用下面的Android.mk

LOCAL_PATH := $(call my-dir)/..include $(CLEAR_VARS)LOCAL_MODULE := libeventLOCAL_SRC_FILES := \    event.c \    evutil.c \    epoll.c \    log.c \    poll.c \    select.c \    signal.c \    http.c \    buffer.c \    evthread.c \    evmap.c \    bufferevent.c \    listener.c \    evutil_rand.c \    bufferevent_sock.c \    bufferevent_filter.c \    bufferevent_pair.c \    strlcpy.c \    event_tagging.c \    evrpc.c \    bufferevent_ratelim.c \    evdns.c \    evthread_pthread.cLOCAL_C_INCLUDES := \	$(LOCAL_PATH) \    $(LOCAL_PATH)/include \    $(LOCAL_PATH)/compatLOCAL_CFLAGS := -DHAVE_CONFIG_Hinclude $(BUILD_SHARED_LIBRARY)
注意最后一行在集成到app时应该把BUILD_SHARED_LIBRARY应该替换成BUILD_STATIC_LIBRARY,这里仅为了编译。

转载请注明出处:

你可能感兴趣的文章
HTML5 移动浏览器支持
查看>>
[LeetCode] Next Closest Time 下一个最近时间点
查看>>
【AngularJS】—— 4 表达式
查看>>
[LeetCode] Surrounded Regions
查看>>
【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
查看>>
U盘启动笔记本无法安装Win7问题和解决
查看>>
基于SignalR的站点有连接数限制问题及解决方案
查看>>
程序猿当下需要准备涉及的技术方向
查看>>
一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
查看>>
2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】
查看>>
Linux setjmp longjmp
查看>>
Java自定义注解开发
查看>>
EMF介绍系列(四、枚举类型、自定义类型和Map)
查看>>
淘宝API开发系列--商家的绑定
查看>>
js函数定义参数个数和实际传入参数的对比
查看>>
从数据库中获取Insert语句
查看>>
DataInputStream和DataOutputStream
查看>>
Database2Sharp重要更新之数据库文档的生成(国庆专辑,祝福我们的祖国)
查看>>
线程的通俗讲解
查看>>
十年之后再看“面向对象”
查看>>