libevent2笔记(linux、windows、android的编译)
0. 前言
我使用的版本是libevent-2.0.21-stable。高级的应用还是得看官网文档http://www.wangafu.net/~nickm/libevent-2.0/doxygen/html/
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.c libevent_pthreads_la_SOURCES = evthread_pthread.c libevent_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.lib 2015/02/26 10:40 789,110 libevent.lib 2015/02/26 10:40 453,366 libevent_core.lib
3个静态库文件。
不过一般会习惯做成VS工程。所以新建一个VS静态库工程,对着Makefile.nmake的内容添加源文件、引用目录、预编译命令就行了。vcproj的部分内容如下:
<ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\buffer.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\bufferevent.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\bufferevent_async.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\bufferevent_filter.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\bufferevent_pair.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\bufferevent_ratelim.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\bufferevent_sock.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\buffer_iocp.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\evdns.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\event.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\event_iocp.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\event_tagging.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\evmap.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\evrpc.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\evthread.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\evthread_win32.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\evutil.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\evutil_rand.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\http.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\listener.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\log.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\signal.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\strlcpy.c" /> <ClCompile Include="..\..\..\third_party\libevent-2.0.21-stable\win32select.c" />
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 := libevent
LOCAL_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.c
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/compat
LOCAL_CFLAGS := -DHAVE_CONFIG_H
include $(BUILD_SHARED_LIBRARY)
注意最后一行在集成到app时应该把BUILD_SHARED_LIBRARY应该替换成BUILD_STATIC_LIBRARY,这里仅为了编译。
转载请注明出处:http://blog.csdn.net/hursing
libevent2笔记(linux、windows、android的编译)的更多相关文章
- windows android studio 编译Jni动态库
项目需要,折腾了半天搞定windows android studio环境编译Jni动态库,现记录下来. 准备安装环境: 1. android studio 下载地址是http://www.androi ...
- Windows、Linux、Android常用软件分享
Windows.Linux.Android常用软件分享 前言 本来没准备写这篇博客,一是没时间,还有其他很多优先级更高的事情要做.二是写这种博客对我自己来说没什么的帮助,以前我就想好了不写教程类,使用 ...
- 在Mac/Linux/Windows上编译corefx遇到的问题及解决方法
这两天尝试在Mac/Linux/Windows三大平台上编译.NET跨平台三驾马车(coreclr/corefx/dnx)之一的corefx(.NET Core Framework),结果三个平台的编 ...
- 使用android ndk编译x86 so在linux下使用的问题
一直以为android ndk编译x86 so库可以在linxu下运行,结果我试了几次都行不通.后来想了一下,android ndk编译的库应该只能在android设备或模拟器上运行才有效,后来改用 ...
- 【转】android程序编译过程
现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...
- 转 谈谈android反编译和防止反编译的方法
谈谈android反编译和防止反编译的方法 android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项 ...
- golang安装卸载 linux+windows+raspberryPI 平台
参考 https://golang.org/doc/install 自ECUG2013洗脑回来,就渴望早点接触Go 听着许式伟和谢孟军的演讲 发现go的网络库的确很强大,高负载利器,语言的一些精简导 ...
- H3 android 系统编译
http://bbs.ickey.cn/group-topic-id-57981.html [Orange Pi PC试用体验]11编译android源码笔记 编译android和编译linux有点类 ...
- 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库
工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...
随机推荐
- n层满k叉树总共有多少个节点
2叉树 1 3 7 对应公式为(2^n-1)/1 3叉树 1 4 13 对应公式为(3^n-1)/2 4叉树 1 5 21对应公式为(4^n-1)/3 ... n层k叉树,总共有(k^n-1)/k-1 ...
- iOS 代码混淆的简单使用
1.工具下载 http://stevenygard.com/projects/class-dump/ 选择dmg安装包 2.打开终端输入:open/usr/local/bin 3. 4.修改权限在 ...
- eclispe中使用python库 pyswip 进行prolog编程
from pyswip import Prolog prolog = Prolog() prolog.assertz("father(michael,john)") prolog. ...
- 使用git时出现Please make sure you have the correct access rights and the repository exists.问题已解决。
使用git时,出现Please make sure you have the correct access rights and the repository exists.问题已解决. 今天我在使用 ...
- 12、xamarin form中实现H5 网页唤醒微信支付的方法
在微信的支付中有种支付叫微信H5支付.方便用户在网页中轻松唤起微信进行支付. 当然微信不推荐大家使用这样的方式唤起微信支付.建议app还是使用正常的微信支付sdk即可 服务端与其他的建议参考微信支付官 ...
- javascript数据基本类型和引用类型区别详解
JavaScript基本数据类型: js基本数据类型包括:undefined,null,number,boolean,string.基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值. ...
- ubuntu 下 重启 mongo 后 遇到蛋疼问题。
以后,切忌 mongo 正常关闭后 ,再重启ubuntu. 否则后果这是很严重. 2014.8.6日 PM 6点. 网站莫名打不开了,全部是空白,又是老问题. 幸亏 及时发现,那就重启下. 蛋疼,重启 ...
- linux文件 面试知识
1. 文件存储结构 Linux正统的文件系统(如ext2.ext3)中,一个文件由目录项.inode和数据块组成. 目录项:包括文件名和inode节点号. inode:又称文件索引节点, ...
- Nodejs学习笔记(十四)—Mongoose介绍和入门
简介 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:ht ...
- spark、hadoop集群添加节点
1.首先添加hdfs的节点,将安装包上传到服务器,设置好环境变量.配置文件按之前spark集群搭建的那里进行修改. 设置完成后,要对新节点新型格式化: # hdfs dfs namenode - ...