android - 包括预建的静态库

标签 android android-ndk

我创建了一个用于测试的静态 C++ 库。它只定义了一个类 MyLibrary 和构造函数 MyLibrary::MyLibrary()。我在 qtcreator 中构建它,并得到一个 libMyLibrary.a 文件,这是一个预构建的静态库。

我想在 Android 项目中使用这个库(使用 NDK)。因此,在一个工作的 NDK 测试项目中,我在与 jni 相同的级别添加了一个名为 inc 的文件夹,我将 libMyLibrary.a 和其对应的头文件mylibrary.h

我的Android.mk如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := MyLibrary
LOCAL_SRC_FILES := ../inc/libMyLibrary.a

include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := helloJNI
LOCAL_SRC_FILES := mainActivity.cpp

LOCAL_C_INCLUDES += inc
LOCAL_STATIC_LIBRARIES := MyLibrary

LOCAL_LDLIBS    := -llog
include $(BUILD_SHARED_LIBRARY)

ndk-build 命令编译没有任何错误。 但是我的静态库显然没有链接(即它没有出现在 obj/local/armeabi/objs).

我试图将它包含在我的 mainActivity.cpp 文件中,但即使找到了 header (mylibrary.h),也没有找到该库,我也不能创建一个对象,如下所示:

MyLibrary test = MyLibrary();

我做错了什么?我已经在 StackOverflow 上阅读了数十个类似的问题,但我仍然不明白。

最佳答案

尝试使用这个:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := helloJNI
LOCAL_SRC_FILES := mainActivity.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc/
LOCAL_LDLIBS    := -llog -L$(LOCAL_PATH)/inc/ -lMyLibrary
include $(BUILD_SHARED_LIBRARY)

将 libMyLibrary.a 和 mylibrary.h 移动到 jni/inc/libMyLibrary.a

关于android - 包括预建的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983037/

相关文章:

Android 数据库问题管理日期

android - 如何在 Android 中处理 ListView 点击

Android eclipse 编辑器 : Unable to edit properties

android - NEON 内部类型在 C 中工作,但在 C++ 中抛出无效参数错误

android - 如何在 Jetpack Compose 中将对象的移动从一个路径平滑地切换到另一路径?

android:launchMode ="singleInstance"使应用程序非常慢

android - 在 Android 中获取 "CURLE_COULDNT_RESOLVE_HOST"错误

android - 如何通过 NDK 使用 c 代码检查设备运行的 API 级别?

android - Android 上的 OpenGL 线段光栅化

java - Android JNI : Why ReleaseByteArrayElements does NOT copy back data