0

我开始使用 arduino 与 Java 交互,这非常简单,但现在我想以编程方式加载 librxtxSerial 本机库,但我不知道。由于我使用的是 MacOS 64 位并使用 Java6,因此我使用了以下 jnilib:http ://blog.iharder.net/2009/08/18/rxtx-java-6-and-librxtxserial-jnilib-on-intel-mac- os-x/在这里推荐:http: //arduino.cc/playground/Interfacing/Java

之后,我尝试像这样以编程方式加载它:

/**
  * Loads the jnilib
  */
public static void loadJniLib() {
    // loads the jnilib from the source folder "src/main/resources"
    URL url = Demo.class.getResource("/librxtxSerial.jnilib");
    try {
        System.load(url.getPath());
    }
    catch (UnsatisfiedLinkError unsatisfiedLinkError) {
        // native code library failed to load.
        unsatisfiedLinkError.printStackTrace();
    }
}

这似乎有效(至少不会引发异常)。

但是当我调用CommPortIdentifier.getPortIdentifier(PORT_NAME);它时,它会引发以下异常:

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1045)
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
    at fr.free.mdwhatever.arduino.maven.Demo.initialize(Demo.java:57)
    at fr.free.mdwhatever.arduino.maven.Demo.main(Demo.java:102)

所以我不明白出了什么问题,因为它似乎是根据以下内容加载它的正确方法:http: //docs.oracle.com/javase/6/docs/api/java/lang/System.html#load( java.lang.String)

任何想法?

PS:您可以在此处找到整个代码:https : //gist.github.com/1853637,前提是 rxtx jar 在类路径中并且定义了本机库位置(就像在 Eclipse 中这样:http://www. eclipsezone.com/eclipse/forums/t49342.html

4

1 回答 1

0

最简单的方法是设置java.library.path系统属性,例如在命令行上使用-Djava.library.path=/usr/lib/jni.

我记得,如果库没有明确列入白名单,库加载会失败。反过来,这意味着库必须位于java.library.path.

于 2012-02-17T15:05:48.147 回答