我需要构建一个共享库,它将在Android应用程序示例中使用。 此共享库必须使用先前静态库中包含的方法...
我有两个项目:
- C ++项目(用于使用NDK构建静态库.a)。
- Android库;使用JNI接口。
我的Android库项目的层次结构是:
项目根
myHeader.hpp文件:
char* myMethod(int a, int b);
jni.cpp文件:
#include <jni.h>
#include <string.h>
#include <stdio.h>
#include "include/myHeader.hpp"
extern "C"
{
jstring Java_my_package_myMethod(JNIEnv* env, jobject obj, jint a, jint b);
}
...
android make file:
LOCAL_PATH := $(call my-dir)
#Build module for static library
include $(CLEAR_VARS)
LOCAL_MODULE := my_static_lib
LOCAL_SRC_FILES := prebuild/mylib.a
LOCAL_EXPORT_C_INCLUDES := include/myHeader.hpp
include $(PREBUILT_STATIC_LIBRARY)
#Build module for jni wrapper
include $(CLEAR_VARS)
LOCAL_MODULE := jni_wrapper_lib
LOCAL_SRC_FILES := jni.cpp
LOCAL_STATIC_LIBRARIES := my_static_lib
include $(BUILD_SHARED_LIBRARY)
当我尝试构建JNI项目时,出现以下错误: 未定义的引用“myMethod(int a,int b)”
有人能解释我为什么会收到这个错误吗?
非常感谢您的时间;
答案 0 :(得分:0)
即使我不能把手放在任何相关的文档上,似乎对我来说LOCAL_EXPORT_C_INCLUDES
应该指向文件夹而不是文件:
LOCAL_EXPORT_C_INCLUDES := include
这似乎是逻辑的,因为这个标志与通常的-I
CFLAG等效,而-Iinclude
而不是-Iinclude/myHeader.hpp
告诉我这是否解决了你的问题!