1

我需要构建一个共享库,它将在 Android 应用程序示例中使用。此共享库必须使用先前静态库中包含的方法...

我有2个项目:

-- C++ 项目(用于使用 NDK 构建静态库 .a)。

--安卓库;带 JNI 接口。

我遵循了本教程: http ://tariqzubairy.wordpress.com/2012/03/12/use-of-prebuild-static-library-compiled-with-android-toolchain/

我的 Android 库项目的层次结构是:

项目根

  • 源代码
  • 杰尼
    • 包括
      • 我的头文件.hpp
    • prebuid(包含 .a 库)
      • mylib.a
    • jni.cpp
    • 安卓.mk

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);
}
...

安卓制作文件:

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)”的引用

有人可以解释我为什么会收到此错误吗?

非常感谢您的宝贵时间;

4

1 回答 1

0

即使我不能将手放在任何相关文档上,但在我看来LOCAL_EXPORT_C_INCLUDES应该指向文件夹而不是文件:

LOCAL_EXPORT_C_INCLUDES := include

这似乎是合乎逻辑的,因为这个标志相当于通常的-ICFLAG,它本来是-Iinclude而不是-Iinclude/myHeader.hpp

告诉我这是否解决了您的问题!

于 2013-07-17T14:59:00.523 回答