我刚刚编译了OpenSSL for Android。我有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中的openssl头文件.cpp。
我得到的错误: 致命错误:openssl / evp.h:没有这样的文件或目录
有人可以告诉我如何解决它吗? 感谢。
答案 0 :(得分:2)
包含dirs在编译器标志中设置-I:所以,设置LOCAL_CFLAGS
变量,其中包含适当的密钥和标头位置:LOCAL_CFLAGS += $(cf_includes)
其中cf_includes
定义为{{1} +} + cf_includes:= includes/openssl
换句话说,你必须像这样玷污LOCAL_CFLAGS:
cf_includes := $(addprefix -Ijni/,$(cf_includes))
尝试用
替换你的android.mkLOCAL_CFLAGS += -Ijni/includes/openssl
希望有所帮助