" java.lang.UnsatisfiedLinkError:* .so:无法找到依赖库"在单元测试环境中

时间:2017-04-07 15:14:16

标签: android c++ windows android-ndk java-native-interface

我试图找出如何将我的原生lib集成到android代码中。我创建了一个简单的C ++函数,它在设备上运行代码时工作正常。但是我目前的目标是让它在单元测试环境(junit)中工作,我遇到了问题:

所以,在单元测试中,env 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)       在java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)       在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)       在java.lang.Runtime.load0(Runtime.java:809)       在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的env中仍然无效,但我没有安装linux来快速检查这个想法。< / p>

1 个答案:

答案 0 :(得分:0)

显然可以,但是这条消息告诉您* .so库依赖于其他一些未在目标平台上呈现的库(在您的情况下在android上)。
可能是你的库使用Windows API中的一些东西。我建议使用Dependency Walker

等工具检测错误的依赖关系