【问题标题】:openssl as shared library in Android Native Codeopenssl 作为 Android 本机代码中的共享库
【发布时间】:2013-06-07 14:52:28
【问题描述】:

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

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:没有这样的文件或目录

谁能告诉我如何解决它? 谢谢。

【问题讨论】:

    标签: android android-ndk


    【解决方案1】:

    在编译器标志 -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)
    


    希望对你有帮助

    【讨论】:

    • Id 与我的项目完全相同,但似乎找不到包含文件夹。我的结构与问题中的完全相同,除了我没有添加的 LOCAL_STATIC_LIBRARIES 行之外,我遵循了您仔细描述的内容。无论如何,我得到与上面相同的错误:致命错误:openssl/bio.h:没有这样的文件或目录。
    • 我可以看看你的 android.mk 吗?
    • 嗨,我解决了 .mk 文件问题,我实现了代码,但现在还有另一个问题,因为 DTLS 方法似乎不在 libssl.so 库中,请看这个主题:@ 987654321@
    • 我忘了告诉你,我给的链接里还有我写的android.mk文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2013-02-04
    • 2015-04-26
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多