作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个带有声明的头文件“abc.h”
int abc();
然后,我创建了一个带有定义的 .cpp 文件“abc.cpp”
int abc()
{
return 0;
}
现在我从上面的文件创建了一个静态库 libabc.a。
然后我创建了一个 HelloWorld Android 项目。然后我在其中创建了一个 jni 文件夹,其中包含子文件夹“header”和“src”。在头文件夹中,我放置了 abc.h,在 src 文件夹中,我放置了“abc.cpp”。现在我在 jni 文件夹中创建了另一个文件“xyz.cpp”,它想要使用 abc() 函数。但是当我运行 ndk-build 命令时,出现此错误。jni/JNIMagicCleanManager.cpp:84: 错误:对函数 abc 的 undefined reference (类似这样)
如何使用静态库 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_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
关于java - 如何在jni中链接静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167988/
我是一名优秀的程序员,十分优秀!