android ndk 编译 libevent

news/2024/11/24 14:00:12/

android ndk 编译 libevent
Russinovich`s Blog 2022-10-19 原文
https://www.shuzhiduo.com/A/rV57oAKG5P/

  1. 下载 libevent 2.1.8 版本

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

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

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

sudo apt-get install automake

sudo apt-get install autoconf

sudo apt-get install libtool

  1. 在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 `.’

  1. ./configure

  2. 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)

  1. 编译 Application.mk

APP_STL := c++_static

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

APP_ABI := armeabi-v7a arm64-v8a x86

#APP_ABI := armeabi-v7a

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

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

  1. error: ‘sys/sysctl.h’ file not found

注释定义 #define EVENT__HAVE_SYS_SYSCTL_H 1

  1. error: static declaration of ‘arc4random_addrandom’ follows non-static declaration

增加定义 #define EVENT__HAVE_ARC4RANDOM 1

  1. error: use of undeclared identifier ‘fd_mask’

注释定义 #define EVENT__HAVE_FD_MASK 1

  1. error: ‘sys/timerfd.h’ file not found

注释定义 #define EVENT__HAVE_SYS_TIMERFD_H 1

  1. error: use of undeclared identifier ‘EPOLL_CLOEXEC’

注释定义 #define EVENT__HAVE_EPOLL_CREATE1 1

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


http://www.ppmy.cn/news/43272.html

相关文章

【计算机网络-传输层】TCP 协议

文章目录1 传输层概述1.1 传输层的功能1.2 端口号2 TCP 报文段2.1 TCP 报文段首部格式2.2 TCP 数据传送的过程3 TCP 连接管理3.1 TCP 连接的建立——三次握手3.1.1 客户机向服务器发送 TCP 连接请求报文段3.1.2 服务器向客户机发送 TCP 连接请求确认报文段3.1.3 客户机向服务器…

数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)

目录 二叉树的定义 二叉树具体的五种基本形态 1.空树 2.只有一个节点 3.有左子树,但右子树为空 4.有右子树,但左子树为空 5.左右两子树都不为空 特殊二叉树 斜二叉树 满二叉树 完全二叉树 二叉树的几个重要性质 初识二叉树的几个操作函数 …

软件测试工作主要做什么

随着信息技术的发展和普及,人们对软件的使用越来越普及。但是在软件的使用过程中,软件的效果却不尽如人意。为了确保软件的质量,整个软件业界已经逐渐意识到测试的重要性,也有越来越多的小伙伴加入了软件测试这个行业中来。软件测…

Moonbeam操作指南 | 如何设置Moonbeam开发节点

Moonbeam开发节点是为本地构建和测试应用的个人开发环境。对以太坊开发者来说,可以和Ganache相媲美。可以使你快速上手,且无需中继链的支出即可轻松实现。 有2种方式可以开始运行节点:使用Docker运行一个预构建的二进制文件,或者…

光耦继电器工作原理及优点概述

光耦继电器是一种电子元器件,也是固态继电器的一种,其主要作用是隔离输入与输出电路,用于保护或者控制电路的正常工作。 光耦继电器工作原理是利用光电转换器将外界信号转化为光信号,通过光纤传输到另一端,再由另一端的…

C#使用EF框架连接SQLServer数据库

C#中使用Entity Framework (EF)连接SQL Server数据库可以使用多种方法,其中比较常用的是Code First和Database First两种方式。 Code First方式 Code First是指通过C#代码来定义数据模型,EF会根据代码自动生成数据库结构。使用Code First需要进行以下步…

JavaWeb开发 —— Web入门

目录 一、Spring 二、SpringBootWeb快速入门 三、HTTP协议 1. 概述 2. 请求协议 3. 响应协议 四、Web服务器 - Tomcat 1. 介绍 2. 基本使用 3. 入门程序解析 一、Spring ① 官网:http://spring.io ② Spring 发展到今天已经形成了一种开发生态圈&…

构建自动过程:FinalBuilder 8.0 Crack

使用 FinalBuilder 自动化您的构建过程很简单。使用 FinalBuilder,您无需编辑 xml 或编写脚本。可视化定义和调试您的构建脚本,然后使用 Windows 调度程序安排它们,或将它们与 Continua CI、Jenkins 或任何其他 CI 服务器集成。 成千上万的软…