资源路径中找不到JNA本机支持(/com/sun/jna/linux-arm/libjnidispatch.so)

我已经开始构建一个java服务,它包含JNA以加载本机C / C ++库,我想在Raspberry PI aka arm平台上运行java服务。 我已成功构建了服务的稳定基础,它在Windows7和linux-amd64 / debian上运行,但是在RPI平台上我得到了上述错误:线程“main”中的exceptionjava.lang.UnsatisfiedLinkError:JNA native资源路径中找不到支持(/com/sun/jna/linux-arm/libjnidispatch.so)

在RPI上我完成了以下操作:*安装了openjdk7和java8 beta,支持arm hard float。 *安装了libjna-java lib。

以下是:

Java的

root@pisces:/opt/TellstickReplay# java -version java version "1.8.0-ea" Java(TM) SE Runtime Environment (build 1.8.0-ea-b36e) Java HotSpot(TM) Client VM (build 25.0-b04, mixed mode) root@pisces:/opt/TellstickReplay# 

LD_LIBRARY_PATH

 root@pisces:/opt/TellstickReplay# echo $LD_LIBRARY_PATH /opt/lib/jna 

CLASSPATH

 root@pisces:/opt/TellstickReplay# echo $CLASSPATH /usr/lib/jna 

没有任何设置似乎满足JAVA与JNA支持。 我甚至试图将jna.jar和linux-arm.jar导出到Eclipse中的项目中,并且一起将jar重建为导出的jar仍然会得到相同的错误。 导出的jar已在windows和linux上成功测试,因此jar文件正在运行。

我还尝试在jar文件中的Manifest中使用CLASSPATH,但没有成功。 我也尝试从绝对路径显式加载libjnidispatch.so,但JAVA然后开始抱怨它找不到libjnidispatch.so的文件,即使路径是100%正确。

那么..有谁知道如何正确获得Raspberry PI平台上的JNA支持工作? 请,我非常沮丧,很快就放弃希望解决这个问题..

我正在为RPI2重新编译Apache Spark ,我花了几天时间来解决这个问题。 然后我找到了最简单的解决方案。 您需要拥有的是默认JVM的本机lib路径中的libjnidispatch.so链接。

 sudo -s ln -s /usr/lib/arm-linux-gnueabihf/jni/libjnidispatch.so /usr/lib/jvm/default-java/jre/lib/arm/libjnidispatch.so 

你系统上的libjnidispatch.so在哪里? 如果它不在您的系统上,JNA将尝试从指示的资源路径从jna.jar解压缩它。 如果它不存在,你将得到UnsatisfiedLinkError

建议您尽可能在系统上显式安装libjnidispatch.so; jna.jar捆绑主要是为了方便在更常见的桌面平台上使用。

linux-arm.jar包含最新版本的libjnidispatch.so,但只有WebStart知道如何从这样的jar中自动加载本机。 如果将其解压缩到/ opt / lib / jna(或LD_LIBRARY_PATH上的其他位置),则应避免链接错误。

我打包了新的jna.jar(4.0),它包含了linux-arm / libjnidispatch.so。 我试图运行的代码现在有效。

我要说的更多是“在您使用的操作系统中的”libjnidispatch.so“的位置配置故障或特定的JRE系统内部文件夹/包/ JNDI结构,它可能不是一个相同布局的Debian或Java JRE。