我目前面临 openssl 的构建问题。
我首先使用 ndk-build the GuardianProject 构建了 libssl.so
和 libcrypto.so
共享库。
第二步,我按照 topic 中的说明执行以下操作,将库与我的 Android 项目集成。 :
1)创建jni文件夹
2)在这个新文件夹中,我创建了一个包含文件夹,并复制粘贴了包含头文件的 openssl 文件夹(来自 openssl 包)
3)创建一个预编译文件夹,我在其中复制了 libssl.so 和 libcrypto.so 文件
4)创建Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
c_includes := $(LOCAL_PATH)
cf_includes := include/openssl
cf_includes := $(addprefix -Ijni/,$(cf_includes))
export_c_includes := $(c_includes)
LOCAL_MODULE := security
LOCAL_SRC_FILES := security.c
LOCAL_CFLAGS += $(cf_includes)
LOCAL_EXPORT_C_INCLUDES := $(export_c_includes)
LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libssl.so
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libcrypto.so
include $(BUILD_SHARED_LIBRARY)
5) 然后我编写了一个名为 security.c 的源文件,其中包含初始化 openssl 的函数
/* OpenSSL headers */
#include "openssl/bio.h"
#include "openssl/ssl.h"
#include "openssl/err.h"
/* Initializing OpenSSL */
void init_openssl(void){
SSL_load_error_strings();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();
}
5) 使用 ndk-build 构建整个内容以获得 libsecurity.so 文件
但是在这一步,编译器似乎没有找到头文件,并且出现此错误:
fatal error: openssl/bio.h: No such file or directory
我是否遗漏了 mk 文件中的某些内容?
最佳答案
您需要做的是使用 PREBUILT_SHARED_LIBRARY
指令。
在您的 Android.mk 中,添加以下部分:
# Prebuilt libssl
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := precompiled/libssl.so
include $(PREBUILT_SHARED_LIBRARY)
# Prebuilt libcrypto
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := precompiled/libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)
作为 LOCAL_MODULE := security
部分的一部分,添加以下内容:
LOCAL_MODULE := security
...
LOCAL_SHARED_LIBRARIES= ssl crypto
此 LOCAL_SHARED_LIBRARIES
行将替换以下行:
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libssl.so
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libcrypto.so
请看一下问题Calling inner Android.mk file to build prebuilt libraries not working了解更多详情。
关于android - 如何在android项目中安装openssl.so和libssl.so?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18248362/