[英]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)
初始化后设置标准属性可能不会达到预期效果。
(强调他们的。)
你有两个选择:
java.library.path
: java -Djava.library.path=/home/daniel/configuration/devices/printer/CITIZENS2000 -jar MyApplication.jar
System.load("/home/daniel/configuration/devices/printer/CITIZENS2000/libCSJjposCom.so")
显然,第一个选项只有在您有权指定 JVM 选项时才可用。 第二个选项仅适用于该文件所在的一台计算机。
如果您需要可移植性,您可以将库与您的应用程序捆绑在一起,然后将其复制到临时目录并从那里加载它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.