【发布时间】:2026-02-12 16:05:01
【问题描述】:
我正在尝试使用我的 C JNI 代码中的 C++ 函数(使用 .so 文件引用)。为了说明我的项目架构,它看起来像这样:
Java -> C (JNI) -> C++ 函数
这是我的 Android.mk 文件的样子:
LOCAL_PATH := $(call my-dir)
# My C++ library
include $(CLEAR_VARS)
LOCAL_MODULE := my_module
LOCAL_SRC_FILES := ../../../../../../module_service/lib/system/lib/libmodule_service.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
# JNI C code
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_C_INCLUDES += ../../../../../module_service/src
LOCAL_SHARED_LIBRARIES := my_module
include $(BUILD_SHARED_LIBRARY)
使用“ndk-build”命令,我的项目构建。但是当我尝试在我的设备上运行它时,它会崩溃并显示以下消息:
java.lang.UnsatisfiedLinkError: ... nativeLibraryDirectories=[/data/app/com.sampleapp.mysampleapplication-1/lib/arm, /vendor/lib, /system/lib]]] couldn't find "liblibmodule_service.so"
什么是在我的 .so 文件中添加另一个“lib”?如果我在我的 /system/lib 目录中创建另一个名为“liblibmodule_service.so”(除了“libmodule_service.so”)的 .so 文件,它就可以工作。但这感觉像是一个 hacky 解决方案,我宁愿不要同时拥有完全相同的文件“libmodule_service.so”和“liblibmodule_service.so”。
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
也许你应该发布你如何加载 libmodule_service 库的代码
标签: android android-ndk shared-libraries