1. 下载 libevent 2.1.8 版本

https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz

2. 先在 win10 上用 wsl ubuntu 编译 libevent

3. 在 wsl 上,准备需要的编译环境

sudo apt-get install automake

sudo apt-get install autoconf

sudo apt-get install libtool

4. 在livevent目录下运行 autogen.sh

./autogen.sh

autoreconf: Entering directory `.'

autoreconf: configure.ac: not using Gettext

autoreconf: running: aclocal --force -I m4

autoreconf: configure.ac: tracing

autoreconf: running: libtoolize --copy --force

libtoolize: putting auxiliary files in '.'.

libtoolize: copying file './ltmain.sh'

libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.

libtoolize: copying file 'm4/libtool.m4'

libtoolize: copying file 'm4/ltoptions.m4'

libtoolize: copying file 'm4/ltsugar.m4'

libtoolize: copying file 'm4/ltversion.m4'

libtoolize: copying file 'm4/lt~obsolete.m4'

autoreconf: running: /usr/bin/autoconf --force

autoreconf: running: /usr/bin/autoheader --force

autoreconf: running: automake --add-missing --copy --force-missing

configure.ac:25: installing './compile'

configure.ac:13: installing './missing'

Makefile.am: installing './depcomp'

autoreconf: Leaving directory `.'

5. ./configure

6. make

至此在 wsl ubuntu 上编译libevent已经完成了


下面,就需要在android ndk 环境下编译

1. 在windows上,下载最新版本的ndk

2. 编写 Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_ARM_MODE := arm

LOCAL_MODULE := libevent

LIB_SRC := event.c \
           evthread.c \
           buffer.c \
           bufferevent.c \
           bufferevent_filter.c \
           bufferevent_pair.c \
           listener.c \
           bufferevent_ratelim.c \
           evmap.c \
           log.c \
           evutil.c \
           evutil_rand.c \
           select.c \
           poll.c \
           epoll.c \
           signal.c \
           event_tagging.c \
           http.c \
           evdns.c \
           evrpc.c \
           bufferevent_sock.c

LOCAL_SRC_FILES  := $(LIB_SRC)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include \
                    $(LOCAL_PATH)/compat

LOCAL_CFLAGS += -pie -fPIE -static -fPIC

include $(BUILD_STATIC_LIBRARY)

3. 编译 Application.mk

APP_STL      := c++_static

APP_CPPFLAGS := -frtti -std=c++11

APP_ABI      := armeabi-v7a arm64-v8a x86

#APP_ABI     := armeabi-v7a

4. 调用 ndk-build.cmd 就可以编译了


编译过程中遇到的问题, 需要修改 ./include/event2/event-config.h 中的定义

1. error: 'sys/sysctl.h' file not found

注释定义  #define EVENT__HAVE_SYS_SYSCTL_H 1

2. error: static declaration of 'arc4random_addrandom' follows non-static declaration

增加定义  #define EVENT__HAVE_ARC4RANDOM 1

3. error: use of undeclared identifier 'fd_mask'

注释定义  #define EVENT__HAVE_FD_MASK 1

4. error: 'sys/timerfd.h' file not found

注释定义  #define EVENT__HAVE_SYS_TIMERFD_H 1

5. error: use of undeclared identifier 'EPOLL_CLOEXEC'

注释定义  #define EVENT__HAVE_EPOLL_CREATE1 1

基本上就对event-config.h中的一些配置做调整就可以在ndk环境当中编译了,非常简单!

android ndk 编译 libevent的更多相关文章

  1. android NDK编译(导入).a文件和编译多个so文件(转)

    源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a LOCAL_PATH := $(call my-dir) include ...

  2. Android NDK编译之undefined reference to 'JNI_CreateJavaVM'

    利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...

  3. 使用android ndk编译x86 so在linux下使用的问题

    一直以为android ndk编译x86 so库可以在linxu下运行,结果我试了几次都行不通.后来想了一下,android ndk编译的库应该只能在android设备或模拟器上运行才有效,后来改用 ...

  4. [原]如何用Android NDK编译FFmpeg

    我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...

  5. Android NDK 编译FFmpeg(不需要复杂的环境变量设置)

    环境: CentOS6.2——64位 借鉴:https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk 在根目录下创建work文件夹:cd  / ...

  6. android ndk编译项目(android-ndk-16r1)

    由于采用android-ndk-16r1版本的ndk来编译 编译的环境之类在这里省略,注意是最后编译的命令如下 Administrator@WIN-AF6P80LVIJ0 ~ $ cd $ANDROI ...

  7. Linux环境下使用Android NDK编译c/c++生成可执行文件

    1.安装Android NDK至Linux(Lubuntu 16) 从网上下载 android-ndk-r13b-linux-x86_64.zip,本人将其解压至/home/guanglun/work ...

  8. android ndk 编译的时候指令集的选取

    android ndk在编译的时候默认生成的是thumb指令(拇指)不是arm(手臂)指令,但是有时候在看反汇编的时候,不太熟悉thumb指令或者说thumb指令看起来更费劲,需要生成arm指令,这个 ...

  9. 用Android NDK编译FFmpeg

    附(2018-01-06):     有一个将x264及lame等库集成进去了且基于android的ffmpeg的编译方法,地址参见:       https://github.com/writing ...

随机推荐

  1. 简单写入excel

    import pymysql,xlwt def to_excel(table_name): host, user, passwd, db = '127.0.0.1', 'root', '123', ' ...

  2. JavaScript代码内部执行顺序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 参数化解决sql注入

    用DynamicParameters: string where = " where a.is_deleted=0 and a.bvent_id=@bventId and au.user_t ...

  4. linux处理器子系统调优

  5. Maven Filter与Profile隔离生产环境与开发环境

    Maven Filter与Profile隔离生产环境与开发环境 在不同的开发阶段,我们一般用到不同的环境,开发阶段使用开发环境的一套东西,测试环境使用测试环境的东西,可能有多个测试环境,生产环境使用的 ...

  6. python常用函数 E

    endswith(str/tuple) 末尾元素匹配,可以传入tuple. 例子: enumerate(iterable) 可以跟踪集合元素索引,适用于迭代器. 例子: eval(str) 可以字符串 ...

  7. AbstractQueuedSynchronizer简单使用

    AQS是JUC中很多同步组件的构建基础,简单来讲,它内部实现主要是状态变量state和一个FIFO队列来完成,同步队列的头结点是当前获取到同步状态的结点,获取同步状态state失败的线程,会被构造成一 ...

  8. 洛谷3321 SDOI2015 序列统计

    懒得放传送[大雾 有趣的一道题 前几天刚好听到Creed_神犇讲到相乘转原根变成卷积的形式 看到这道题当然就会做了啊w 对于m很小 我们暴力找原根 如果你不会找原根的话 出门左转百度qwq 找到原根以 ...

  9. toj 4061 矩阵攻击(最大独立集)

    题目: 给定一个01 矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置 (x,y) 都可以按照“日”字攻击其周围八个位置(x−1,y−2),(x−2,y−1),(x+1,y−2),(x+2,y− ...

  10. network ---边赋予权重

    有向图和无向图都可以给边赋予权重,用到的方法是add_weighted_edges_from,它接受1个或多个三元组[u,v,w]作为参数,其中u是起点,v是终点,w是权重.例如: G.add_wei ...