我是android ndk的初学者。我正在尝试加载我的共享库,该库是根据 ndk-r8d 提供的“TwoLibs”示例构建的。在我的 android 项目中加载一个简单的共享库时出现以下错误
“编译拇指:jbmc <= jbmc.c jni/jbmc.c:1:19:致命错误:mylib.h:没有此类文件或目录编译终止。make:* * [obj/local/armeabi/objs/jbmc/ jbmc.o] 错误 1*
我正在使用以下代码:
安卓.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := libmylib.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := jbmc
LOCAL_SRC_FILES := jbmc.c
LOCAL_SHARED_LIBRARIES := mylib
include $(BUILD_SHARED_LIBRARY)
使用本机 C 源代码在我的本机中使用库函数。
jbmc.c
#include "mylib.h"
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_example_test1_TestActivity_myfunct(JNIEnv* env, jobject thiz, jstring str)
{
str = myf(str);
return (*env)->NewStringUTF(env, str);
}
这里库函数接受任何字符串并返回另一个字符串。
我对 jni 有以下层次结构。
/jni
- 安卓.mk
- jbmc.c
- libmylib.so
在我的测试活动中,我正在使用:
public native String myfunct(String abc);
static{
System.loadLibrary("jbmc");
System.loadLibrary("mylib");
}
我认为我的标题无法加载或找到。虽然我已经使用 LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) 将我的标题导出到本地路径。
我引用的文档位于: NDK Prebuilt library support