繁体   English   中英

Java 加载本机库

[英]Java Loading Native Libraries

我在路径上有打印机驱动程序: /home/daniel/configuration/devices/printer/CITIZENS2000/libCSJjposCom.so

我需要将此驱动程序加载到我的 java 应用程序中,我正在使用以下代码:

@Override
public void addLibraryPath(String pathToAdd) {
    try {
        System.setProperty("java.library.path", System.getProperty("java.library.path") + ":/home/daniel/configuration/devices/printer/CITIZENS2000");

        System.loadLibrary("CSJjposCom");
    } catch (Exception e) {
        throw new IllegalStateException("Failed to load library", e);
    }
}


但是我在loadLibrary() method: Method threw 'java.lang.UnsatisfiedLinkError'异常。 (java.library.path 中没有 CSJjposCom);

我该如何解决?

尽管您可以在代码中设置java.library.path ,但它不会产生任何影响。 System.getProperties() 的文档中

除非另有说明,否则更改标准系统属性可能会产生不可预知的结果。 属性值可能在初始化期间或首次使用时被缓存。 使用getProperties()setProperties(Properties)setProperty(String, String)clearProperty(String)初始化后设置标准属性可能不会达到预期效果。

(强调他们的。)

你有两个选择:

  1. Java启动时设置java.library.pathjava -Djava.library.path=/home/daniel/configuration/devices/printer/CITIZENS2000 -jar MyApplication.jar
  2. 忘记库路径,直接使用System.load(filename)而不是 Sytem.loadLibrary 加载驱动程序文件: System.load("/home/daniel/configuration/devices/printer/CITIZENS2000/libCSJjposCom.so")

显然,第一个选项只有在您有权指定 JVM 选项时才可用。 第二个选项仅适用于该文件所在的一台计算机。

如果您需要可移植性,您可以将库与您的应用程序捆绑在一起,然后将其复制到临时目录并从那里加载它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM