1

我是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

4

0 回答 0