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 youdon't. */
#define EVENT__HAVE_DECL_CTL_KERN 1/* Define to 1 if you have the declaration of `KERN_ARND', and to 0 if youdon't. */
#define EVENT__HAVE_DECL_KERN_ARND 0/* Define to 1 if you have the declaration of `KERN_RANDOM', and to 0 if youdon't. */
#define EVENT__HAVE_DECL_KERN_RANDOM 1/* Define to 1 if you have the declaration of `RANDOM_UUID', and to 0 if youdon'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 onyour 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 withthis 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 compilercalls 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 := armLOCAL_MODULE := libeventANDROID := trueLIB_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)/compatOPENSSL_DIR := ./openssl-lib   <=========================================增加这行,路径自己设置LOCAL_CFLAGS += -pie -fPIE -static -fPICinclude $(BUILD_STATIC_LIBRARY)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/807467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0 idea搭建springboot项目

1 2 3 4 5 配置文件 application.yaml server:servlet:context-path: /app #项目名controller //注入到spring容器 Controller public class HelloController {GetMapping("hello")ResponseBodypublic String hello(){return "Hello,SpringBoot";} }启…

【chatGPT】我:在Cadence Genus软件中,出现如下问题:......【3】

我 在Cadence Genus中&#xff0c;upf文件是什么&#xff0c;有什么作用 ChatGPT 在Cadence Genus中&#xff0c;UPF&#xff08;Unified Power Format&#xff09;文件是一个用于指导和描述设计的电源意图的标准文件格式。这个格式由Accellera制定&#xff0c;旨在提供一种方…

【MATLAB 预测算法教程】_1粒子群算法优化BP神经网络预测 - 教程和对应MATLAB代码

本文以MATLAB自带的脂肪数据集为例,将数据保存在EXCEL工作簿内,方便替换数据使用,以下介绍粒子群算法优化BP神经网络预测的MATLAB代码编写,主要流程包括1. 读取数据 2.划分训练集和测试集 3.归一化 4.确定BP神经网络的隐含层最优节点数量 5. 使用粒子群算法优化BP的神经网络…

[数据概念|数据技术]智能合约如何助力数据资产变现

“ 区块链上数据具有高可信度&#xff0c;智能合约将区块链变得更加智能化&#xff0c;以支持企业场景。” 之前鼹鼠哥已经发表了一篇文章&#xff0c;简单介绍了区块链&#xff0c;那么&#xff0c;智能合约又是什么呢&#xff1f;它又是如何助力数据资产变现的呢&#xff1f;…

Swagger转换成Excel文件

1、添加swagger解析依赖包&#xff1a; <dependency><groupId>io.swagger.parser.v3</groupId><artifactId>swagger-parser</artifactId><version>2.1.12</version></dependency>2、示例代码&#xff1a; package com.rlclou…

华为校招机试 - 相似图片分类(20240410)

题目描述 小明想要处理一批图片&#xff0c;将相似的图片分类。 他首先对图片的特征采样&#xff0c;得到图片之间的相似度&#xff0c;然后按照以下规则判断图片是否可以归为一类&#xff1a; 相似度 > 0 表示两张图片相似如果 A 和 B 相似&#xff0c;B 和 C 相似&…

基于spring boot的大学生体质测试管理系统

基于spring boot的大学生体质测试管理系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 …

nginx将一个路径下的多种url分别映射

背景 nginx如何将/static/下的images或script或css路径&#xff0c;分别映射到/data下的images、scripts或styles。 分析 可以在nginx的配置文件中添加以下配置&#xff0c;来实现url以/static/开头时&#xff0c;根据不同的子路径映射到不同的本地文件路径&#xff1a; loc…

Android app如何禁止运行在模拟器中

禁止 Android 应用程序在模拟器上运行涉及到在运行时检测应用是否在模拟器上运行&#xff0c;并根据情况做出相应的处理。以下是一种方法&#xff0c;通过判断设备的某些特征来检测模拟器&#xff1a; 创建一个用于检测模拟器的方法&#xff1a; public static boolean isEmu…

shell脚本echo打印错位

在脚本中使用echo命令获取字段时&#xff0c;打印后字符串错位了。 脚本大致如下&#xff1a; #!/bin/bash source /etc/profile export LANGen_US.UTF-8 now_datedate "%Y-%m-%d %H:%M" filescat ***Path.txt now_daydate "%Y-%m-%d" separatorecho…

工业视觉AI应用总结记录

在工业应用中&#xff0c;一些复杂场景下AI识别用的越来越多了&#xff0c;下面是应用的概念的简单汇总梳理&#xff0c;做记录备份使用。 1.场景分类 AI的场景分类简单来说包含但不限于图像分类、图像分割和目标检测以及字符识别等等。 图像分类 是对整幅图像来说的&#xf…

新鲜出炉!这一套二手平台管理系统,太牛了,直接领取【带源码】

​今天给大家分享一套基于SpringbootVue的二手平台管理系统源码&#xff0c;在实际项目中可以直接复用。(免费提供&#xff0c;文末自取) 一、系统运行图&#xff08;设计报告和接口文档&#xff09; 1、登陆页面 2、后台页面 3、设计报告包含接口文档 二、系统搭建视频教程 …

基于RKNN的YOLOv5安卓Demo

1.简介 基于RKNPU2 SDK 1.6.0版的安卓YOLOv5演示应用程序&#xff0c;选择图片进行对象检测并显示识别结果。 GitHub源码地址&#xff1a;https://github.com/shiyinghan/rknn-android-yolov5 2.实现过程 参考RKNN官方库RKNN Model Zoo提供的YOLOv5对象检测demo&#xff0c…

SQL注入sqli_labs靶场第三题

?id1and 11 and 11和?id1and 11 and 11进行测试如果11页面显示正常和原页面一样&#xff0c;并且12页面报错或者页面部分数据显示不正常&#xff0c;那么可以确定此处为字符型注入。 根据报错信息判断为单引号带括号注入 联合查询&#xff1a; 猜解列名 ?id1) order by 3-…

Java毕业设计 基于springboot vue撸宠平台 宠物系统

Java毕业设计 基于springboot vue撸宠平台 宠物系统 springboot撸宠平台 宠物系统 功能介绍 首页 图片轮播 用户或商家注册 用户或商家登录 登录验证码 店铺信息 店铺详情 店铺投诉 宠物信息 宠物详情 预订 退订 搜索 收藏 点赞 踩 评论 个人中心 更新信息 我的收藏 在线客服…

input输入限制:自动补全两位小数、金额限制两位小数、只能输入正整数

金额自动补全两位小数 <el-input v-model.trim"form.invoice_price" clearable oninput"valuevalue.match(/\d\.?\d{0,2}/,)" blur"form.invoice_priceJEblurFn(form.invoice_price)"/>function JEblurFn(value){return valueNumber(va…

提升法律文书起草效率:AlphaGPT 助力律师快速生成诉讼和仲裁文件

法律文书起草对于法律专业人士而言是一项基础而关键的任务。无论是民事、刑事还是行政诉讼&#xff0c;以及仲裁案件&#xff0c;精确的法律文书撰写对于案件的成功至关重要。然而&#xff0c;这一过程往往既耗时又复杂&#xff0c;尤其是在处理复杂的案情和面对当事人难以理解…

syncfusion-diagram:demo1如何实现

xmlns:syncfusion"http://schemas.syncfusion.com/wpf" xmlns:stencil"clr-namespace:Syncfusion.UI.Xaml.Diagram.Stencil;assemblySyncfusion.SfDiagram.WPF"当我们进入syncfusion的diagram中&#xff0c;可以看到&#xff0c;一个非常炫酷的例子 不仅实…

抖音招聘小程序可以通过抖音直播进行招聘

现在就是抖音报吧&#xff0c;又叫报白名单&#xff0c;它是可以通过抖音直播进行招聘&#xff0c;也可以在小视频中添加小程序&#xff0c;然后不会受到流量的限制。正常&#xff0c;如果您要是在抖音直播&#xff0c;或者是在视频里头说招聘两个字的话&#xff0c;都直播的话…

openGauss 5.0 单点企业版部署_Centos7_x86(下)

上一篇分享了安装环境、配置、创建用户&#xff0c;本篇将继续分享执行、安装、访问数据库。 8、目录规划 --创建存放安装包的目录 mkdir -p /topsoft/soft/openGauss chmod 777 -R /topsoft/soft--创建目录 目录会自动创建&#xff0c;可选择不创建 mkdir -p /topsoft/huaw…