繁体   English   中英

使用预建的共享库时,android ndk UnsatisfiedLinkError

[英]android ndk UnsatisfiedLinkError when using a prebuilt shared library

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

这是我的主要模块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接口,使用该命令加载

System.loadLibrary("SightCore-jni");  

在ndk-build过程中,我没有得到编译或链接错误。 当我尝试运行应用程序并访问其中一个本机方法时,我得到了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罗伊塞缪尔的努力和正确的直觉。

我希望这可以帮助任何人。

干杯

  1. 您是否确定要在JNI上使用的cpp函数名称对应于System.loadLibrary("SightCore-jni"); Java包装类的包名称System.loadLibrary("SightCore-jni"); 存在?

    例如,如果你想在java层中使用C函数myFunction ,并假设你的JNI包装类在com.my.package.sightcore包中,那么你的C代码函数名应该是这样的:

     JNIEXPORT JNICALL Java_com_my_package_sightcore_myFunction(JNIEnv * env, jobject thiz, ...) 
  2. 如果您在设备上运行应用程序,请查看API级别,以及sdk版本是否与您设备的Android版本(API级别)匹配。

希望这可以帮助。 如果您需要更多说明,请告诉我......

这发生在我身上,我的解决方案是确保在切换编译器之后我包含了正确的文件libgnustl_shared.so而不是libc++_shared.so 因此,只要确保这些文件中的任何一个对于您的构建是正确的,并确保它已使用最新版本更新,您就不应再遇到此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM