【问题标题】:How to link static library in jni?如何在jni中链接静态库?
【发布时间】:2014-11-27 10:11:30
【问题描述】:

我创建了一个带有声明的头文件“abc.h”

int abc();

然后,我创建了一个带有定义的 .cpp 文件“abc.cpp”

int abc()
{ 
  return 0;
}

现在我从上面的文件创建了一个静态库 libabc.a。

然后我创建了一个 HelloWorld Android 项目。然后我在其中创建了一个 jni 文件夹,其中包含子文件夹“header”和“src”。在头文件夹中我放了 abc.h,在 src 文件夹中我放了“abc.cpp”。现在我在想要使用 abc() 函数的 jni 文件夹中创建了另一个文件“xyz.cpp”。但是当我运行 ndk-build 命令时,我得到了这个错误。 jni/JNIMagicCleanManager.cpp:84: error: undefined reference to function abc (something like this)

如何使用静态库 libabc.a 定义 abc() 我已将 libabc.a 放在与 Android.mk 平行的同一文件夹中。以下是我的 Android.mk 文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
MAGIC_CLEAN_ROOT := ..
MAGIC_CLEAN_SRC_ROOT := ../$(LOCAL_PATH)/src
MAGIC_CLEAN_SRC_FILES := xyz.cpp
MAGIC_CLEAN_C_INCLUDES := $(LOCAL_PATH)/headers/

LOCAL_STATIC_LIBRARIES := magicClean
LOCAL_MODULE := myJniLib2


LOCAL_SRC_FILES := $(MAGIC_CLEAN_SRC_FILES)
LOCAL_C_INCLUDES := $(MAGIC_CLEAN_C_INCLUDES)
LOCAL_C_INCLUDES += .
include $(BUILD_SHARED_LIBRARY)

编辑 1: 许多人问为什么我有静态库时有 abc.cpp,这只是为了保留代码。请告诉如何从静态库中调用函数。

【问题讨论】:

  • LOCAL_C_INCLUDES = . := 而不是=
  • 看来你也需要设置LOCAL_LDLIBS,见stackoverflow.com/questions/6475944/…。 -- 为什么你的MAGIC_CLEAN_SRC_ROOT 设置为headers 文件夹? - 我很困惑你为什么要构建一个静态库,然后在你的项目构建中包含它的源代码。要么只包含标题并链接到库,要么跳过库步骤并包含标题+源。
  • @Michael 请再次查看我的 Android.mk
  • @HannoBinder 请再次查看我的 Android.mk
  • 试试-L[path] -l[lib]

标签: java android android-ndk g++ static-libraries


【解决方案1】:

在使用LOCAL_STATIC_LIBRARIES之前,你需要像这个例子一样使用PREBUILT_STATIC_LIBRARY,这个例子使用gnu静态库,但你的也是一样的。

include $(CLEAR_VARS)

LOCAL_MODULE            := gnustl_static
LOCAL_CPPFLAGS += -std=c++11
LOCAL_SRC_FILES         := ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/thumb/libgnustl_static.a
LOCAL_EXPORT_C_INCLUDES := ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include
LOCAL_EXPORT_C_INCLUDES += ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/include/

include $(PREBUILT_STATIC_LIBRARY)

你应该把它放在你的 Android.mk 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多