android ndk 编译 libevent
1. 下载 libevent 2.1.8 版本
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.cLOCAL_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的更多相关文章
- android NDK编译(导入).a文件和编译多个so文件(转)
源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a LOCAL_PATH := $(call my-dir) include ...
- Android NDK编译之undefined reference to 'JNI_CreateJavaVM'
利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...
- 使用android ndk编译x86 so在linux下使用的问题
一直以为android ndk编译x86 so库可以在linxu下运行,结果我试了几次都行不通.后来想了一下,android ndk编译的库应该只能在android设备或模拟器上运行才有效,后来改用 ...
- [原]如何用Android NDK编译FFmpeg
我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...
- Android NDK 编译FFmpeg(不需要复杂的环境变量设置)
环境: CentOS6.2——64位 借鉴:https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk 在根目录下创建work文件夹:cd / ...
- android ndk编译项目(android-ndk-16r1)
由于采用android-ndk-16r1版本的ndk来编译 编译的环境之类在这里省略,注意是最后编译的命令如下 Administrator@WIN-AF6P80LVIJ0 ~ $ cd $ANDROI ...
- Linux环境下使用Android NDK编译c/c++生成可执行文件
1.安装Android NDK至Linux(Lubuntu 16) 从网上下载 android-ndk-r13b-linux-x86_64.zip,本人将其解压至/home/guanglun/work ...
- android ndk 编译的时候指令集的选取
android ndk在编译的时候默认生成的是thumb指令(拇指)不是arm(手臂)指令,但是有时候在看反汇编的时候,不太熟悉thumb指令或者说thumb指令看起来更费劲,需要生成arm指令,这个 ...
- 用Android NDK编译FFmpeg
附(2018-01-06): 有一个将x264及lame等库集成进去了且基于android的ffmpeg的编译方法,地址参见: https://github.com/writing ...
随机推荐
- hive 分桶及抽样调查
1.分桶的概述 分区提供了一个隔离数据和优化查询的遍历方式.不是所有的数据集都可形成合力的分区 对于一张表或者分区,hive可以进一步组织成桶,也就是更为细粒度的数据范围 分区针对的是数据的存储路径( ...
- 1.openshift搭建
第1章 主机规划和所需文件 1.1 主机规划 IP地址 域名 用途 11.11.233.125 master01.song.test.cnpc 容器编排.etcd 11.11.233.126 mast ...
- linux误用rm删除文件后恢复
linux 系统:ubuntu16.04 误把/usr/local local文件删除了,要疯 步骤: 1.对于文件系统为ext3文件系统 sudo apt-get install ext3grep ...
- elasticsearch 深入 —— Search After实时滚动查询
Search After 一般的分页需求我们可以使用form和size的方式实现,但是这种分页方式在深度分页的场景下应该是要避免使用的.深度分页会随着请求的页次增加,所消耗的内存和时间的增长也是成比例 ...
- 源码分析--HashMap(JDK1.8)
在JDK1.8中对HashMap的底层实现做了修改.本篇对HashMap源码从核心成员变量到常用方法进行分析. HashMap数据结构如下: 先看成员变量: 1.底层存放数据的是Node<K,V ...
- Java代码乱象!
文章转载自公众号 阿里巴巴中间件 , 作者 陈昌毅 导读 查尔斯·狄更斯在<双城记>中写道:“这是一个最好的时代,也是一个最坏的时代.” 移动互联网的快速发展,出现了许多新机遇,很多创业 ...
- 几种IO机制区别
IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSock ...
- mangodb语句
{ field: { $exists: <boolean> } }
- 前端每日实战:72# 视频演示如何用纯 CSS 创作气泡填色的按钮特效
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/eKqZjy 可交互视频 此视频是可 ...
- Java EE会话技术Cookie和Session
会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...