android ndk编译libevent

最近需要编译一下libevent到android设备上跑一下,这里说下基于cmake的编译方式。

一、准备工作。

很多软件越来越多的选择了支持cmake构建,可以比较方便的跨平台。这里编译的2.1.8, 编译到android的armeabi、armeabi-v7a、arm64-v8a、x86、x86_64下面。
从 libevent的github地址,https://github.com/libevent/libevent  检出tag release-2.1.8-stable
① git co -b release-2.1.8-stable release-2.1.8-stable。后续编译在此基础上编译。不要从libevent官网下载,下载的没有cmake相关文件,直接从github libevent仓库,官方检出。
② android-cmake, 检出 https://github.com/taka-no-me/android-cmake,要用到这个。
③ ndk用的是android-ndk-r13b

二、编译

2.1 处理下android-ndk-r13b

由于android-ndk-r13b的头文件有问题,libevent编译的时候会报arc4random相关的错误,这里改一下android-ndk-r13b:find . -name “*.h” -o -name “*.c” -o -name “*.cpp”|xargs grep “void arc4random_”
找出arc4random_ 系列函数声明的地方,注释之。由于我编译的是基于android-9 anrdoid-21,因此可以注释这些函数声明
深度截图20171010-2247
// void arc4random_buf(void*, size_t);
// extern void arc4random_addrandom(unsigned char *, int);
注释这些即可。

2.2 修改CMakeLists.txt

深度截图_选择区域_20171010231202深度截图_选择区域_20171010230750
深度截图_选择区域_20171010231202
如图几步的修改
① 打开编译动态库。
② 关闭thread支持
③ 关闭openssl支持
④ 关闭checkfuntion arc4random的检查
⑤ 关闭waitpid的检查,不然编译会检查出问题,
⑥ 去掉soversion, 最后希望在so里面是libevent.so 而不是libevent.so.2.1.8

2.3 编译脚本

mkdir build, 在build目录下准备几个脚本。
compile.sh-android-one, 内容如下:
cmake -DCMAKE_TOOLCHAIN_FILE=~/Android/android-cmake/android.toolchain.cmake \ -DANDROID_NDK=~/Android/android-ndk-r13b \ -DCMAKE_BUILD_TYPE=Release \ -DANDROID_ABI="$1" \ -DANDROID_NATIVE_API_LEVEL=9 \ -DANDROID_STL=gnustl_static \ -DCMAKE_INSTALL_PREFIX=/home/dengpan/tmp/libevent-2.1.8/$1 \ ..
compile.sh-linux, 内容如下:
cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/home/dengpan/tmp/libevent-2.1.8/linux \ ..
compileAll.sh, 内容如下:
#!/bin/bash for i in armeabi armeabi-v7a arm64-v8a x86 x86_64 do ls | grep -vE "compileAll.sh|compile.sh-android-one|compile.sh-linux"|xargs rm -rf ./compile.sh-android-one $i make -j10 make install ls | grep -vE "compileAll.sh|compile.sh-android-one|compile.sh-linux"|xargs rm -rf done #开始编译linux ls | grep -vE "compileAll.sh|compile.sh-android-one|compile.sh-linux"|xargs rm -rf ./compile.sh-linux make -j10 make install ls | grep -vE "compileAll.sh|compile.sh-android-one|compile.sh-linux"|xargs rm -rf
执行,./compileAll.sh 即可在 ~/tmp/libevent-2.1.8下面,看到完整编译好的libevent的android (armeabi armeabi-v7a armeabi-v8a x86 x86_64) 跟 linux版本了。

2.4 编译好的prebuilt版本,下载即用

以上代码的完整版本在,  下载地址    
libevent-2.1.8的编译好的android ndk(armeabi armeabi-v7a arm64-v8a x86 x8664)、linux版本的编译好的版本,下载即用, 下载地址  。


评论

此博客中的热门博文

How to Build a Cocos2d-x Android App for Multiple Architectures

Android跨平台编译 —— libevent

开源 C++ 库列表