单元测试环境中的"java.lang.UnsatisfiedLinkError: *.so: Can't find dependent libraries"

"java.lang.UnsatisfiedLinkError: *.so: Can't find dependent libraries" in unit-test env

本文关键字:libraries find Can dependent 测试环境 java lang 单元 UnsatisfiedLinkError so      更新时间:2023-10-16

我正在尝试弄清楚如何将我的本机库集成到Android代码中。我创建了一个简单的C++函数,在设备上运行代码时它工作正常。但是,我目前的目标是使其在单元测试 env (junit) 中工作,我遇到了问题:

所以,在单元测试环境中System.loadLibrary("lib")不起作用,我可以把它放到System.load("/full/path/to/lib.so"),但现在这一行抛出了一个异常:

java.lang.UnsatisfiedLinkError: app\build\intermediates\cmake\debug\obj\x86_64\liblib.so: 找不到依赖库 at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086)

路径正确,并且存在此路径的文件。

我尝试使用基于x86版本的 lib 的路径,但它仍然抛出相同的异常。

我正在使用最新的Android NDK,Clang工具链,在基于Windows 7 64位的笔记本电脑上运行单元测试,CPU是Core i7,运行时的java版本似乎也是64位。

那么在这种情况下可能有什么问题以及如何解决它?


我有一种感觉,即使考虑到 clang 编译 x86/x86_64 *.so 文件的事实,它们在基于 Windows 的环境中仍然无效,但我没有安装 linux 来快速检查这个想法。

很明显,但是此消息告诉您的 *.so 库依赖于目标平台上未显示的其他一些库(在您的情况下在 android 上)。
可能,你的库使用了Windows API中的一些东西。我建议使用依赖沃克等工具来检测不良依赖

关系