单元测试环境中的"java.lang.UnsatisfiedLinkError: *.so: Can't find dependent libraries"
"java.lang.UnsatisfiedLinkError: *.so: Can't find dependent libraries" in unit-test env
我正在尝试弄清楚如何将我的本机库集成到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中的一些东西。我建议使用依赖沃克等工具来检测不良依赖
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- C++ MFC Libraries in Travis CI
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 错误"Could not find Boost"(缺少:上下文标头)
- /usr/bin/ld: cannot find -lc++
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 使用 find 解析文件会给出不同文件的奇怪结果
- 在 ifcondition al中 find() C++ STL 中的 == a.end() 有什么用?
- Cannot find -lglad
- "Cannot find -l<directory>"错误 - CMake
- 为什么在向量上使用 std::find() 时会出现错误?
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++ find() 在存储为变量时返回不同的值
- set::find 查找不存在的元素
- 使用 std::find 时没有匹配的函数调用错误
- 如何处理"Cmake Error: Unable to find the requested Boost libraries"?
- 单元测试环境中的"java.lang.UnsatisfiedLinkError: *.so: Can't find dependent libraries"
- 使用 CMake 时出现"Could not find boost libraries"错误