簡體   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