【问题标题】:Android NDK/JNI: Build shared library using static libraryAndroid NDK/JNI:使用静态库构建共享库
【发布时间】:2013-07-17 10:19:16
【问题描述】:

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

我有 2 个项目:

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

-- Android 库 ;带 JNI 接口。

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

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

项目根目录

  • 源代码
  • jni
    • 包括
      • myHeader.hpp
    • prebuid(包含 .a 库)
      • mylib.a
    • jni.cpp
    • Android.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);
}
...

android 制作文件:

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

有人可以解释我为什么会出现这个错误吗?

非常感谢您的宝贵时间;

【问题讨论】:

    标签: android android-ndk java-native-interface shared-libraries static-libraries


    【解决方案1】:

    即使我无法处理任何相关文档,似乎在我看来,LOCAL_EXPORT_C_INCLUDES 应该指向文件夹而不是文件:

    LOCAL_EXPORT_C_INCLUDES := include
    

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

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

    【讨论】:

    • 我刚刚删除了这一行。我仍然有错误“未定义的引用”,但这次不是关于类,而是关于我在静态库的方法中声明的对象!当我尝试使用静态库构建共享库时,就会发生这种情况;所以我想问题出在我构建静态库(c++ 源)时的链接过程中?
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2023-03-23
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多