ubuntu下使用ndk编译libevnet

简介: ubuntu下使用ndk编译libevnet
libevent源码编译
源码的获取

http://www.ffmpeg.club/libevent.html 这是看夏老师课堂获取的,以后也要学他的课,所以就用整个源码编译,减少问题出现

编译静态库

https://blog.csdn.net/weixin_28927079/article/details/109380748 大概上是参考这篇博客操作的,额外的修改会在下面提到

  在目录下增加Android.mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_MODULE := libevent
ANDROID := true
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 \
       evutil_time.c \
           select.c \
           poll.c \
           epoll.c \
           signal.c \
           event_tagging.c \
           http.c \
           evdns.c \
           evrpc.c \
           bufferevent_sock.c \
       strlcpy.c 
 
LOCAL_SRC_FILES  := $(LIB_SRC)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include \
                    $(LOCAL_PATH)/compat
LOCAL_CFLAGS += -pie -fPIE -static -fPIC
include $(BUILD_SHARED_LIBRARY)       # 需要修改为 include $(BUILD_STATIC_LIBRARY)

  

继续增加Application.mk文件


APP_STL      := c++_static
APP_CPPFLAGS := -frtti -std=c++11
APP_ABI      := armeabi-v7a arm64-v8a   #我这边编译器就是用  arm64-v8a 这个
APP_BUILD_SCRIPT := Android.mk

 修改配置文件event2/event-config.h,如果没有就新建一个,这个文件后面也是要修改的


/* event2/event-config.h
 *
 * This file was generated by autoconf when libevent was built, and post-
 * processed by Libevent so that its macros would have a uniform prefix.
 *
 * DO NOT EDIT THIS FILE.
 *
 * Do not rely on macros in this file existing in later versions.
 */
 
#ifndef EVENT2_EVENT_CONFIG_H_INCLUDED_
#define EVENT2_EVENT_CONFIG_H_INCLUDED_
 
/* config.h.  Generated from config.h.in by configure.  */
/* config.h.in.  Generated from configure.ac by autoheader.  */
 
/* Define if libevent should build without support for a debug mode */
/* #undef EVENT__DISABLE_DEBUG_MODE */
 
/* Define if libevent should not allow replacing the mm functions */
/* #undef EVENT__DISABLE_MM_REPLACEMENT */
 
/* Define if libevent should not be compiled with thread support */
/* #undef EVENT__DISABLE_THREAD_SUPPORT */
 
/* Define to 1 if you have the `accept4' function. */
#define EVENT__HAVE_ACCEPT4 1
 
/* Define to 1 if you have the `arc4random' function. */
/* #undef EVENT__HAVE_ARC4RANDOM */
 
/* Define to 1 if you have the `arc4random_buf' function. */
/* #undef EVENT__HAVE_ARC4RANDOM_BUF */
 
/* Define to 1 if you have the <arpa/inet.h> header file. */
#define EVENT__HAVE_ARPA_INET_H 1
 
/* Define to 1 if you have the `clock_gettime' function. */
#define EVENT__HAVE_CLOCK_GETTIME 1
 
/* Define to 1 if you have the declaration of `CTL_KERN', and to 0 if you
   don't. */
#define EVENT__HAVE_DECL_CTL_KERN 1
 
/* Define to 1 if you have the declaration of `KERN_ARND', and to 0 if you
   don't. */
#define EVENT__HAVE_DECL_KERN_ARND 0
 
/* Define to 1 if you have the declaration of `KERN_RANDOM', and to 0 if you
   don't. */
#define EVENT__HAVE_DECL_KERN_RANDOM 1
 
/* Define to 1 if you have the declaration of `RANDOM_UUID', and to 0 if you
   don't. */
#define EVENT__HAVE_DECL_RANDOM_UUID 1
 
/* Define if /dev/poll is available */
/* #undef EVENT__HAVE_DEVPOLL */
 
/* Define to 1 if you have the <dlfcn.h> header file. */
#define EVENT__HAVE_DLFCN_H 1
 
/* Define if your system supports the epoll system calls */
#define EVENT__HAVE_EPOLL 1
 
/* Define to 1 if you have the `epoll_create1' function. */
#define EVENT__HAVE_EPOLL_CREATE1 1
 
/* Define to 1 if you have the `epoll_ctl' function. */
#define EVENT__HAVE_EPOLL_CTL 1
 
/* Define to 1 if you have the <errno.h> header file. */
#define EVENT__HAVE_ERRNO_H 1
 
/* Define to 1 if you have ERR_remove_thread_stat(). */
#define EVENT__HAVE_ERR_REMOVE_THREAD_STATE 1
 
/* Define to 1 if you have the `eventfd' function. */
#define EVENT__HAVE_EVENTFD 1
 
/* Define if your system supports event ports */
/* #undef EVENT__HAVE_EVENT_PORTS */
 
/* Define to 1 if you have the `fcntl' function. */
#define EVENT__HAVE_FCNTL 1
 
/* Define to 1 if you have the <fcntl.h> header file. */
#define EVENT__HAVE_FCNTL_H 1
 
/* Define to 1 if the system has the type `fd_mask'. */
#define EVENT__HAVE_FD_MASK 1
 
/* Do we have getaddrinfo()? */
#define EVENT__HAVE_GETADDRINFO 1
 
/* Define to 1 if you have the `getegid' function. */
#define EVENT__HAVE_GETEGID 1
 
/* Define to 1 if you have the `geteuid' function. */
#define EVENT__HAVE_GETEUID 1
 
/* Define this if you have any gethostbyname_r() */
/* #undef EVENT__HAVE_GETHOSTBYNAME_R */
 
/* Define this if gethostbyname_r takes 3 arguments */
/* #undef EVENT__HAVE_GETHOSTBYNAME_R_3_ARG */
 
/* Define this if gethostbyname_r takes 5 arguments */
/* #undef EVENT__HAVE_GETHOSTBYNAME_R_5_ARG */
 
/* Define this if gethostbyname_r takes 6 arguments */
/* #undef EVENT__HAVE_GETHOSTBYNAME_R_6_ARG */
 
/* Define to 1 if you have the `getifaddrs' function. */
#define EVENT__HAVE_GETIFADDRS 1
 
/* Define to 1 if you have the `getnameinfo' function. */
#define EVENT__HAVE_GETNAMEINFO 1
 
/* Define to 1 if you have the `getprotobynumber' function. */
#define EVENT__HAVE_GETPROTOBYNUMBER 1
 
/* Define to 1 if you have the `getservbyname' function. */
#define EVENT__HAVE_GETSERVBYNAME 1
 
/* Define to 1 if you have the `gettimeofday' function. */
#define EVENT__HAVE_GETTIMEOFDAY 1
 
/* Define to 1 if you have the <ifaddrs.h> header file. */
#define EVENT__HAVE_IFADDRS_H 1
 
/* Define to 1 if you have the `inet_ntop' function. */
#define EVENT__HAVE_INET_NTOP 1
 
/* Define to 1 if you have the `inet_pton' function. */
#define EVENT__HAVE_INET_PTON 1
 
/* Define to 1 if you have the <inttypes.h> header file. */
#define EVENT__HAVE_INTTYPES_H 1
 
/* Define to 1 if you have the `issetugid' function. */
/* #undef EVENT__HAVE_ISSETUGID */
 
/* Define to 1 if you have the `kqueue' function. */
/* #undef EVENT__HAVE_KQUEUE */
 
/* Define if the system has zlib */
/* #undef EVENT__HAVE_LIBZ */
 
/* Define to 1 if you have the `mach_absolute_time' function. */
/* #undef EVENT__HAVE_MACH_ABSOLUTE_TIME */
 
/* Define to 1 if you have the <mach/mach_time.h> header file. */
/* #undef EVENT__HAVE_MACH_MACH_TIME_H */
 
/* Define to 1 if you have the <memory.h> header file. */
#define EVENT__HAVE_MEMORY_H 1
 
/* Define to 1 if you have the `mmap' function. */
#define EVENT__HAVE_MMAP 1
 
/* Define to 1 if you have the `nanosleep' function. */
#define EVENT__HAVE_NANOSLEEP 1
 
/* Define to 1 if you have the <netdb.h> header file. */
#ifndef WIN32
#define EVENT__HAVE_NETDB_H 1
#endif
 
/* Define to 1 if you have the <netinet/in6.h> header file. */
/* #undef EVENT__HAVE_NETINET_IN6_H */
 
/* Define to 1 if you have the <netinet/in.h> header file. */
#define EVENT__HAVE_NETINET_IN_H 1
 
/* Define to 1 if you have the <netinet/tcp.h> header file. */
#define EVENT__HAVE_NETINET_TCP_H 1
 
/* Define if the system has openssl */
#define EVENT__HAVE_OPENSSL 1
 
/* Define to 1 if you have the `pipe' function. */
#define EVENT__HAVE_PIPE 1
 
/* Define to 1 if you have the `pipe2' function. */
#define EVENT__HAVE_PIPE2 1
 
/* Define to 1 if you have the `poll' function. */
#define EVENT__HAVE_POLL 1
 
/* Define to 1 if you have the <poll.h> header file. */
#define EVENT__HAVE_POLL_H 1
 
/* Define to 1 if you have the `port_create' function. */
/* #undef EVENT__HAVE_PORT_CREATE */
 
/* Define to 1 if you have the <port.h> header file. */
/* #undef EVENT__HAVE_PORT_H */
 
/* Define if you have POSIX threads libraries and header files. */
/* #undef EVENT__HAVE_PTHREAD */
 
/* Define if we have pthreads on this system */
#define EVENT__HAVE_PTHREADS 1
 
/* Define to 1 if you have the `putenv' function. */
#define EVENT__HAVE_PUTENV 1
 
/* Define to 1 if the system has the type `sa_family_t'. */
#define EVENT__HAVE_SA_FAMILY_T 1
 
/* Define to 1 if you have the `select' function. */
#define EVENT__HAVE_SELECT 1
 
/* Define to 1 if you have the `sendfile' function. */
#define EVENT__HAVE_SENDFILE 1
 
/* Define to 1 if you have the `setenv' function. */
#define EVENT__HAVE_SETENV 1
 
/* Define if F_SETFD is defined in <fcntl.h> */
#define EVENT__HAVE_SETFD 1
 
/* Define to 1 if you have the `setrlimit' function. */
#define EVENT__HAVE_SETRLIMIT 1
 
/* Define to 1 if you have the `sigaction' function. */
#define EVENT__HAVE_SIGACTION 1
 
/* Define to 1 if you have the `signal' function. */
#define EVENT__HAVE_SIGNAL 1
 
/* Define to 1 if you have the `splice' function. */
#define EVENT__HAVE_SPLICE 1
 
/* Define to 1 if you have the <stdarg.h> header file. */
#define EVENT__HAVE_STDARG_H 1
 
/* Define to 1 if you have the <stddef.h> header file. */
#define EVENT__HAVE_STDDEF_H 1
 
/* Define to 1 if you have the <stdint.h> header file. */
#define EVENT__HAVE_STDINT_H 1
 
/* Define to 1 if you have the <stdlib.h> header file. */
#define EVENT__HAVE_STDLIB_H 1
 
/* Define to 1 if you have the <strings.h> header file. */
#define EVENT__HAVE_STRINGS_H 1
 
/* Define to 1 if you have the <string.h> header file. */
#define EVENT__HAVE_STRING_H 1
 
/* Define to 1 if you have the `strlcpy' function. */
/* #undef EVENT__HAVE_STRLCPY */
 
/* Define to 1 if you have the `strsep' function. */
#define EVENT__HAVE_STRSEP 1
 
/* Define to 1 if you have the `strtok_r' function. */
#define EVENT__HAVE_STRTOK_R 1
 
/* Define to 1 if you have the `strtoll' function. */
#define EVENT__HAVE_STRTOLL 1
 
/* Define to 1 if the system has the type `struct addrinfo'. */
#define EVENT__HAVE_STRUCT_ADDRINFO 1
 
/* Define to 1 if the system has the type `struct in6_addr'. */
#define EVENT__HAVE_STRUCT_IN6_ADDR 1
 
/* Define to 1 if `s6_addr16' is a member of `struct in6_addr'. */
#define EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR16 1
 
/* Define to 1 if `s6_addr32' is a member of `struct in6_addr'. */
#define EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR32 1
 
/* Define to 1 if the system has the type `struct sockaddr_in6'. */
#define EVENT__HAVE_STRUCT_SOCKADDR_IN6 1
 
/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */
/* #undef EVENT__HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN */
 
/* Define to 1 if `sin_len' is a member of `struct sockaddr_in'. */
/* #undef EVENT__HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
 
/* Define to 1 if the system has the type `struct sockaddr_storage'. */
#define EVENT__HAVE_STRUCT_SOCKADDR_STORAGE 1
 
/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */
#define EVENT__HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1
 
/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */
/* #undef EVENT__HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY */
 
/* Define to 1 if the system has the type `struct so_linger'. */
/* #undef EVENT__HAVE_STRUCT_SO_LINGER */
 
/* Define to 1 if you have the `sysctl' function. */
#define EVENT__HAVE_SYSCTL 1
 
/* Define to 1 if you have the <sys/devpoll.h> header file. */
/* #undef EVENT__HAVE_SYS_DEVPOLL_H */
 
/* Define to 1 if you have the <sys/epoll.h> header file. */
 
#define EVENT__HAVE_SYS_EPOLL_H 1
 
/* Define to 1 if you have the <sys/eventfd.h> header file. */
#define EVENT__HAVE_SYS_EVENTFD_H 1
 
/* Define to 1 if you have the <sys/event.h> header file. */
/* #undef EVENT__HAVE_SYS_EVENT_H */
 
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#define EVENT__HAVE_SYS_IOCTL_H 1
 
/* Define to 1 if you have the <sys/mman.h> header file. */
#define EVENT__HAVE_SYS_MMAN_H 1
 
/* Define to 1 if you have the <sys/param.h> header file. */
#define EVENT__HAVE_SYS_PARAM_H 1
 
/* Define to 1 if you have the <sys/queue.h> header file. */
#define EVENT__HAVE_SYS_QUEUE_H 1
 
/* Define to 1 if you have the <sys/resource.h> header file. */
#define EVENT__HAVE_SYS_RESOURCE_H 1
 
/* Define to 1 if you have the <sys/select.h> header file. */
#define EVENT__HAVE_SYS_SELECT_H 1
 
/* Define to 1 if you have the <sys/sendfile.h> header file. */
#define EVENT__HAVE_SYS_SENDFILE_H 1
 
/* Define to 1 if you have the <sys/socket.h> header file. */
#define EVENT__HAVE_SYS_SOCKET_H 1
 
/* Define to 1 if you have the <sys/stat.h> header file. */
#define EVENT__HAVE_SYS_STAT_H 1
 
/* Define to 1 if you have the <sys/sysctl.h> header file. */
#ifndef ANDROID
#define EVENT__HAVE_SYS_SYSCTL_H 1
#endif
 
/* Define to 1 if you have the <sys/timerfd.h> header file. */
#define EVENT__HAVE_SYS_TIMERFD_H 1
 
/* Define to 1 if you have the <sys/time.h> header file. */
#ifndef WIN32
#define EVENT__HAVE_SYS_TIME_H 1
#endif
 
/* Define to 1 if you have the <sys/types.h> header file. */
#define EVENT__HAVE_SYS_TYPES_H 1
 
/* Define to 1 if you have the <sys/uio.h> header file. */
#define EVENT__HAVE_SYS_UIO_H 1
 
/* Define to 1 if you have the <sys/wait.h> header file. */
#define EVENT__HAVE_SYS_WAIT_H 1
 
/* Define if TAILQ_FOREACH is defined in <sys/queue.h> */
#define EVENT__HAVE_TAILQFOREACH 1
 
/* Define if timeradd is defined in <sys/time.h> */
#define EVENT__HAVE_TIMERADD 1
 
/* Define if timerclear is defined in <sys/time.h> */
#define EVENT__HAVE_TIMERCLEAR 1
 
/* Define if timercmp is defined in <sys/time.h> */
#define EVENT__HAVE_TIMERCMP 1
 
/* Define to 1 if you have the `timerfd_create' function. */
#define EVENT__HAVE_TIMERFD_CREATE 1
 
/* Define if timerisset is defined in <sys/time.h> */
#define EVENT__HAVE_TIMERISSET 1
 
/* Define to 1 if the system has the type `uint16_t'. */
#define EVENT__HAVE_UINT16_T 1
 
/* Define to 1 if the system has the type `uint32_t'. */
#define EVENT__HAVE_UINT32_T 1
 
/* Define to 1 if the system has the type `uint64_t'. */
#define EVENT__HAVE_UINT64_T 1
 
/* Define to 1 if the system has the type `uint8_t'. */
#define EVENT__HAVE_UINT8_T 1
 
/* Define to 1 if the system has the type `uintptr_t'. */
#define EVENT__HAVE_UINTPTR_T 1
 
/* Define to 1 if you have the `umask' function. */
#define EVENT__HAVE_UMASK 1
 
/* Define to 1 if you have the <unistd.h> header file. */
#define EVENT__HAVE_UNISTD_H 1
 
/* Define to 1 if you have the `unsetenv' function. */
#define EVENT__HAVE_UNSETENV 1
 
/* Define to 1 if you have the `usleep' function. */
#define EVENT__HAVE_USLEEP 1
 
/* Define to 1 if you have the `vasprintf' function. */
#define EVENT__HAVE_VASPRINTF 1
 
/* Define if waitpid() supports WNOWAIT */
/* #undef EVENT__HAVE_WAITPID_WITH_WNOWAIT */
 
/* Define if kqueue works correctly with pipes */
/* #undef EVENT__HAVE_WORKING_KQUEUE */
 
/* Define to 1 if you have the <zlib.h> header file. */
/* #undef EVENT__HAVE_ZLIB_H */
 
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#define EVENT__LT_OBJDIR ".libs/"
 
/* Numeric representation of the version */
#define EVENT__NUMERIC_VERSION 0x02010800
 
/* Name of package */
#define EVENT__PACKAGE "libevent"
 
/* Define to the address where bug reports for this package should be sent. */
#define EVENT__PACKAGE_BUGREPORT ""
 
/* Define to the full name of this package. */
#define EVENT__PACKAGE_NAME "libevent"
 
/* Define to the full name and version of this package. */
#define EVENT__PACKAGE_STRING "libevent 2.1.8-stable"
 
/* Define to the one symbol short name of this package. */
#define EVENT__PACKAGE_TARNAME "libevent"
 
/* Define to the home page for this package. */
#define EVENT__PACKAGE_URL ""
 
/* Define to the version of this package. */
#define EVENT__PACKAGE_VERSION "2.1.8-stable"
 
/* Define to necessary symbol if this constant uses a non-standard name on
   your system. */
/* #undef EVENT__PTHREAD_CREATE_JOINABLE */
 
/* The size of `int', as computed by sizeof. */
#define EVENT__SIZEOF_INT 4
 
/* The size of `long', as computed by sizeof. */
#define EVENT__SIZEOF_LONG 8
 
/* The size of `long long', as computed by sizeof. */
#define EVENT__SIZEOF_LONG_LONG 8
 
/* The size of `off_t', as computed by sizeof. */
#define EVENT__SIZEOF_OFF_T 8
 
/* The size of `pthread_t', as computed by sizeof. */
#define EVENT__SIZEOF_PTHREAD_T 8
 
/* The size of `short', as computed by sizeof. */
#define EVENT__SIZEOF_SHORT 2
 
/* The size of `size_t', as computed by sizeof. */
#define EVENT__SIZEOF_SIZE_T 8
 
/* The size of `void *', as computed by sizeof. */
#define EVENT__SIZEOF_VOID_P 8
 
/* Define to 1 if you have the ANSI C header files. */
#define EVENT__STDC_HEADERS 1
 
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#define EVENT__TIME_WITH_SYS_TIME 1
 
/* Enable extensions on AIX 3, Interix.  */
#ifndef EVENT___ALL_SOURCE
# define EVENT___ALL_SOURCE 1
#endif
/* Enable GNU extensions on systems that have them.  */
#ifndef EVENT___GNU_SOURCE
# define EVENT___GNU_SOURCE 1
#endif
/* Enable threading extensions on Solaris.  */
#ifndef EVENT___POSIX_PTHREAD_SEMANTICS
# define EVENT___POSIX_PTHREAD_SEMANTICS 1
#endif
/* Enable extensions on HP NonStop.  */
#ifndef EVENT___TANDEM_SOURCE
# define EVENT___TANDEM_SOURCE 1
#endif
/* Enable general extensions on Solaris.  */
#ifndef EVENT____EXTENSIONS__
# define EVENT____EXTENSIONS__ 1
#endif
 
 
/* Version number of package */
#define EVENT__VERSION "2.1.8-stable"
 
/* Enable large inode numbers on Mac OS X 10.5.  */
#ifndef EVENT___DARWIN_USE_64_BIT_INODE
# define EVENT___DARWIN_USE_64_BIT_INODE 1
#endif
 
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef EVENT___FILE_OFFSET_BITS */
 
/* Define for large files, on AIX-style hosts. */
/* #undef EVENT___LARGE_FILES */
 
/* Define to 1 if on MINIX. */
/* #undef EVENT___MINIX */
 
/* Define to 2 if the system does not provide POSIX.1 features except with
   this defined. */
/* #undef EVENT___POSIX_1_SOURCE */
 
/* Define to 1 if you need to in order for `stat' and other things to work. */
/* #undef EVENT___POSIX_SOURCE */
 
/* Define to appropriate substitue if compiler doesnt have __func__ */
/* #undef EVENT____func__ */
 
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef EVENT__const */
 
/* Define to `__inline__' or `__inline' if that's what the C compiler
   calls it, or to nothing if 'inline' is not supported under any name.  */
#ifndef EVENT____cplusplus
/* #undef EVENT__inline */
#endif
 
/* Define to `int' if <sys/types.h> does not define. */
/* #undef EVENT__pid_t */
 
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef EVENT__size_t */
 
/* Define to unsigned int if you dont have it */
/* #undef EVENT__socklen_t */
 
/* Define to `int' if <sys/types.h> does not define. */
/* #undef EVENT__ssize_t */
 
#ifdef ANDROID
#undef EVENT__HAVE_ARC4RANDOM
#undef EVENT__HAVE_ARC4RANDOM_BUF
#undef EVENT__HAVE_FD_MASK
#undef EVENT__HAVE_SYS_TIMERFD_H
#undef EVENT__HAVE_EPOLL_CREATE
#undef EVENT__HAVE_GETIFADDRS
#endif
 
#endif /* event2/event-config.h */

 配置完后,开始进行编译,ndk-build.cmd路径根据实际情况修改


     D:\Android-SDK\ndk\21.3.6528147\ndk-build.cmd NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk
     #ndk-build.cmd是android中的可执行文件

第一个报错以及解决


    Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16.
    [arm64-v8a] Compile        : event <= event.c
    ./event.c:28:10: fatal error: 'evconfig-private.h' file not found
    #include "evconfig-private.h"
            ^~~~~~~~~~~~~~~~~~~~


  解决方法: 把Android.mk当前目录下的\WIN32-Code\nmake\evconfig-private.h拷贝到Android.mk所在目录下


第二个报错以及解决


    ./epoll.c:148:23: error: use of undeclared identifier 'EPOLL_CLOEXEC'
            epfd = epoll_create1(EPOLL_CLOEXEC);
                                ^


  解决方法: 将event2/event-config.h目录下的#define EVENT__HAVE_EPOLL_CREATE1 1注释掉


第三个报错以及解决

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

增加定义 #define EVENT__HAVE_ARC4RANDOM 1

编译结果

  在\obj\local\arm64-v8a目录下获得libevent.a

openssl源码编译

https://github.com/aluvalasuman/OpenSSL1.0.1cForAndroid

  直接用github上面整理好的工程编译就行了,编译方法和上述一样,最后会生成libcrypto.alibssl.a

带着openssl编译libevent

  修改libevent目录下的Android.mk,增加一行如下

      LOCAL_PATH := $(call my-dir)
      include $(CLEAR_VARS)
      LOCAL_ARM_MODE := arm
      LOCAL_MODULE := libevent
      ANDROID := true
      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 \
               evutil_time.c \
               select.c \
               poll.c \
               epoll.c \
               signal.c \
               event_tagging.c \
               http.c \
               evdns.c \
               evrpc.c \
               bufferevent_sock.c \
               strlcpy.c 
      
      LOCAL_SRC_FILES  := $(LIB_SRC)
      LOCAL_C_INCLUDES := $(LOCAL_PATH)/include \
                        $(LOCAL_PATH)/compat
 
      OPENSSL_DIR := ./openssl-lib   <=========================================增加这行,路径自己设置
 
      LOCAL_CFLAGS += -pie -fPIE -static -fPIC
      include $(BUILD_STATIC_LIBRARY)


目录
相关文章
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
140 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
23天前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
1月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
2月前
|
Ubuntu 编译器 C语言
Ubuntu 源码编译指定版本 make:神秘代码背后的激情冒险,等你来战!
【9月更文挑战第8天】在Ubuntu中,编译指定版本的源码`make`是一项挑战但也极具价值的任务。它允许我们根据特定需求定制软件,提升性能与功能适配。首先需安装必要工具包如GCC等;接着下载所需源码并阅读相关文档以了解编译要求。通过运行`./configure`、`make`及`sudo make install`命令完成编译安装流程。过程中可能遇到依赖项缺失或编译选项设置不当等问题,需根据错误提示逐一解决。对于大型项目,可利用多核编译加快速度。掌握这一技能有助于更好地探索开源世界。
44 2
|
3月前
|
Ubuntu Linux
ubuntu源码编译指定版本make
以上内容涵盖了在Ubuntu中编译安装指定版本软件的全过程,这是一个技术性很强的操作,不仅可以带来定制化的安装体验,同时也能增加对系统管理和软件构建流程的理解。遵循以上步骤,任何有一定基础的用户都能够按需编译和安装软件。
57 8
|
3月前
|
Ubuntu Linux Windows
如何在WSL中的ubuntu编译Linux内核并且安装使用ebpf?
请注意,在WSL1中可能会由于内核架构限制而无法成功进行以上过程,WSL2对于Linux内核的完整支持更为合适。此外,部分步骤可能因不同的Linux发行版或内核版本而异。
174 4
|
3月前
|
Ubuntu 编译器 C语言
Ubuntu 源码编译指定版本 make:神秘代码背后的激情冒险,等你来战!
【8月更文挑战第19天】在Ubuntu中编译指定版本的`make`工具是一项高级技巧,能让你针对特定需求定制软件。首先确保已安装`build-essential`等必要组件。下载所需版本源码后,遵循README指南配置与编译。使用`./configure`检测环境,`make`编译,最后`sudo make install`安装。面对问题如缺失依赖或编译选项不当,需耐心解决。对于大型项目,可利用多核加速编译,如`make -j 4`。这一过程虽具挑战,却能显著提升软件性能与功能适配。
72 2
|
2月前
|
Ubuntu
编译ubuntu内核
编译ubuntu内核
|
3月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
184 0
|
3月前
|
Ubuntu
Ubuntu22.04,AOSP编译报错: libncurses.so.5: cannot open shared object file: No such file
本文描述了在Ubuntu 22.04系统上编译AOSP时遇到的`libncurses.so.5`缺失错误,并提供了通过安装相应库解决该问题的步骤。
366 0