gpt4 book ai didi

使用预建共享库时android ndk UnsatisfiedLinkError

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:13 26 4
gpt4 key购买 nike

我正在尝试创建一个链接到另一个共享库的共享库。

这是我的主要模块 Android.mk:

TOP_LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)

LOCAL_PATH := $(TOP_LOCAL_PATH)

include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := cpp


LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/ $(LOCAL_PATH)/lib/include
LOCAL_MODULE := SightCore-jni
LOCAL_SRC_FILES := SightDemo.cpp SightCore-jni.cpp
LOCAL_SHARED_LIBRARIES := SightAPI
LOCAL_LDLIBS = -llog

include $(BUILD_SHARED_LIBRARY)

我在 ./lib 目录中还有预构建的共享库,它有自己的 Android.mk 文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := SightAPI
LOCAL_SRC_FILES := libSightAPI.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

SightCore-jni.cpp源文件是共享库的jni接口(interface),使用命令加载

System.loadLibrary("SightCore-jni");  

在 ndk-build 过程中,我遇到没有编译或链接错误。当我尝试运行应用程序并访问其中一种 native 方法时,我得到了 UnsatsfiedLinkError。我注意到,如果在我的 jni 代码中禁用对 SightAPI 的引用并在 LOCAL_STATIC_LIBRARIES := SightAPI 行中输入错字,则构建成功并且没有 UnsatisfiedLinkError
这意味着我拥有的 jni 代码是好的(我实际上确定它没问题......)

所以观察结果如下:
如果我使用预构建 共享库编译共享库,我会得到一个损坏 .so 文件。

如果我编译同一个 ndk 项目而不链接到预构建的共享库,则没有问题从 java 端加载共享库。

如果可以,请帮帮我。

提前致谢

意大利

最佳答案

发现问题。

显然 ndk 构建系统不会自动加载引用的共享库,即使它们已在您的 Android.mk 中声明。

为了解决这个问题,我不得不调用 System.loadLibrary(SightAPI) & System.loadLibrary("SightCore-jni")。我原以为唯一要加载的库是主库 SightCore-jni

嗯..我想道德是如果你想做某事,就自己做:)

+1 给 Roy Samuel,感谢他的努力和正确的直觉。

我希望这对任何人都有帮助。

干杯

关于使用预建共享库时android ndk UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5299802/

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