gpt4 book ai didi

android - 在 Android NDK 中重命名依赖库导致 UnsatisfiedLinkError

转载 作者:行者123 更新时间:2023-11-29 14:02:22 24 4
gpt4 key购买 nike

我正在使用 Android NDK 开发一个 Android 应用程序。应用程序的 JNI 层依赖于共享库“libDependentLib.so”。我的 android.mk 看起来像:

LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
TARGET_PLATFORM := 'android-10'
LOCAL_CPP_EXTENSION := .cpp
LOCAL_CPPFLAGS += -fno-exceptions -fno-rtti
MY_LOCAL_PATH := $(LOCAL_PATH)/../
LOCAL_LDLIBS := -L$(call host-path, $(MY_LOCAL_PATH)/libs) -lDependentLib
LOCAL_C_INCLUDES := $(MY_LOCAL_PATH)/include-all $(MY_LOCAL_PATH)/include
MY_FILES := abc.cpp xyz.cpp
LOCAL_LDLIBS += -lm -llog -lstdc++
LOCAL_SRC_FILES += $(MY_FILES)
LOCAL_MODULE := jniLayer
include $(BUILD_SHARED_LIBRARY)

我的 libs 目录结构是:

<Android_Project>
|
libs----armeabi-----libjniLayer.so
| |---------libstlport_shared.so
|-----------------libDependentLib.so

每次我在运行应用程序之前将 libDependentLib.so 复制到 armeabi。库的加载是这样完成的:

static {
try {
/* loading the libraries */
System.loadLibrary("stlport_shared");
System.loadLibrary("DependentLib");
System.loadLibrary("jniLayer");
} catch (Throwable th) {
th.printStackTrace();
}
}

这运行良好。但由于某些要求,我不得不将外部库名称更改为 DependentLib_1。我在 Android.mk 中重命名了相同的名称,同时在 java 中加载库,在 AndroidProject 中加载库名称。但是应用程序在 System.loadLibrary("jniLayer"); 失败了说

java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1966]:88 could not load needed library 'libDependentLib.so' for 'libjniLayer.so'    (load_library[1108]: Library 'libDependentLib.so' not found)

我无法弄清楚为什么仍在搜索 libDependentLib.so。我已将所有内容重命名为 libDependentLib_1.so。所以同样应该寻找。除了 Andorid.mk 和 jni 加载,libDependentLib.so 在哪里被引用?注:Android工程包含新的lib

最佳答案

您的 libjniLayer.so 是否依赖于 libDependentLib.so?
如果是这样,你不能重命名libDependentLib.so,因为当构建libjniLayer.so时,链接器将依赖项的名称放在.so (libDependentLib.so ) 在目标代码中。因此,如果您重命名 libDepenedentLib.so,jniLayer.so 仍会寻找 libDepenedentLib.so。

关于android - 在 Android NDK 中重命名依赖库导致 UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com