java - Hadoop 中奇怪的 UnsatisfiedLinkError

标签 java hadoop java-native-interface mapreduce

我在 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/

相关文章:

java - while循环与mysql java数据库

java - 如何改进 Apache Wicket 以进行 Groovy 编程?

java - java核心中文字操作和整数操作之间的性能问题

java - 用户错误后返回扫描仪读取 - java

sql - 使用Sqoop和Snappy压缩从Hive读取值

android - 如何使用 2 个字符串参数从 jni java 库调用?

php - 如何将 JSON 请求中的过滤器参数发送到 HBase REST API?

java - 如何在PIG拉丁语的平面文件的所有列上使用子字符串操作

java - Android - 从在 SurfaceView 上播放的 MediaPlayer 获取帧以将它们传递给 native C++ 代码

java - 在 Linux 上运行 Java 调用 native .so 时持续存在 UnsatisfiedLinkError