[英]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.