我在 OpenCV linux 版本上做了一个 cmake,它创建了所有必需的共享对象(库)。 我什至能够在我的系统上使用 JNI 从 Java 调用使用这些库的示例 OpenCV 程序。它正在运行。 但是当我尝试使用
在 Hadoop Mapper 中加载 libhighgui.so.2.0 时System.load("path/to/libhighgui.so.2.0");
我得到错误:
UnsatisfiedLinkError:/path/to/libhighgui.so.2.0: libjpeg.so.62: cannot
open shared object file: No such file or directory
有趣的是,OpenCV 上的 CMake 并没有创建这个 libjpeg.so。
您有任何帮助/解决方案吗? 提前致谢..
编辑:其他库已成功加载,我正在使用分布式缓存来分发共享库。
最佳答案
ldd path/to/libhighgui.so.2.0
在命令行上产生了什么?
您的共享库依赖于其他共享库,而这些共享库在运行时在标准库路径上是不可用的。
您需要确保您的库所依赖的所有 .so 也在每个集群节点的库路径上(或者是标准系统路径,例如/lib,或者您需要修改 java.library. path 系统属性以包含一个非标准目录 - 或者只是使用 DistributedCache 推送它们,因为它将本地文件夹添加到库路径)
关于java - Hadoop 中奇怪的 UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300053/