【问题标题】:"java.lang.UnsatisfiedLinkError: *.so: Can't find dependent libraries" in unit-test env单元测试环境中的“java.lang.UnsatisfiedLinkError:*.so:找不到依赖库”
【发布时间】:2017-04-07 15:14:16
【问题描述】:

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

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

java.lang.UnsatisfiedLinkError: app\build\intermediates\cmake\debug\obj\x86_64\liblib.so: 找不到依赖库 在 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 的环境中仍然无效,但我没有安装 linux 来快速检查这个想法。

【问题讨论】:

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


    【解决方案1】:

    很明显,但这条消息表明您的 *.so 库依赖于其他一些库,这些库未在目标平台(在您的情况下为 android)上提供。
    可能,您的库使用了 Windows API 中的一些东西。我建议使用Dependency Walker等工具检测不良依赖

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      相关资源
      最近更新 更多