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

时间:2013-01-31 22:03:42

标签: java jna raspberry-pi

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

在RPI上我做了以下事情: *安装了openjdk7和java8 beta,支持arm hard float。 *已安装libjna-java lib。

以下设置:

爪哇

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支持?拜托,我非常沮丧,很快就放弃了解决这个问题的希望..

5 个答案:

答案 0 :(得分:2)

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

let queryType = data.select(ada, code, name, proof, size, case_size, price)
        .filter(bevType == type)

    let rows = Array(queryType)

    for row in rows{
        let name = row[self.name]
        let type = row[self.type]
        let cost = row[self.cost]
        let price = row[self.price]


        localArray.addObject(name)
        localArray.addObject(type)
        localArray.addObject(cost)
        localArray.addObject(price)

    }  

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我执行以下操作:

  1. sudo apt-get install libjna-java
  2. 获取已安装的jar /usr/share/java/jna.jar
  3. 将jna.jar安装为Maven依赖项

他们为我工作...