繁体   English   中英

openssl作为Android Native Code中的共享库

[英]openssl as shared library in Android Native Code

我刚刚编译了OpenSSL for Android。 我有libcrypto.so和libssl.so共享库。 我创建了一个名为TrialApp的示例Android应用程序。 我们的想法是使用一些调用libssl和libcrypto共享库的本机函数。 因此,在我的jni目录下,我有一个TrialApp.cpp,其中包含一个简单的SHA1示例。这是我在Eclipse上的NDK Application目录的树结构:

TrialApp
|
|-->Activity.java
|
|-->TrialApp.java(which includes System.LoadLibrary calls)
|
|-->jni
    |-->TrialApp.cpp
    |
    |-->Android.mk
    |
    |-->includes
    |   |
    |   |-->openssl (dir containing *.h files)
    |
    |-->precompiled
       |-->libssl.so
       |-->libcrypto.so

这是Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := TrialApp
LOCAL_SRC_FILES := TrialApp.cpp
LOCAL_EXPORT_C_INCLUDE_DIRS  := $(LOCAL_PATH)/includes/openssl
LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libssl.so
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libcrypto.so
LOCAL_STATIC_LIBRARIES := sslx cryptox

include $(BUILD_SHARED_LIBRARY)

但是编译器无法找到TrialApp,.cpp中的openssl头文件。

我得到的错误:致命错误:openssl / evp.h:没有这样的文件或目录

有人能告诉我如何解决它吗? 谢谢。

在编译器标志-I中设置包含目录:所以,设置LOCAL_CFLAGS变量,其中包含适当的键和标题位置,如下所示: LOCAL_CFLAGS += $(cf_includes)其中cf_includes定义为cf_includes:= includes/openssl + cf_includes := $(addprefix -Ijni/,$(cf_includes))
换句话说,你必须像这样玷污LOCAL_CFLAGS:
LOCAL_CFLAGS += -Ijni/includes/openssl

尝试用你的android.mk替换

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

c_includes := $(LOCAL_PATH) 
cf_includes:= includes/openssl

cf_includes := $(addprefix -Ijni/,$(cf_includes))

export_c_includes := $(c_includes)

LOCAL_MODULE    := TrialApp
LOCAL_SRC_FILES := TrialApp.cpp
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
LOCAL_STATIC_LIBRARIES := sslx cryptox

include $(BUILD_SHARED_LIBRARY)


希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM