Java 无法使用System.load加载rxtx本机库
我目前正在OS X上开发,并试图用System.load加载librxtxSerial.jnilib,但这不起作用,而且总是导致Java 无法使用System.load加载rxtx本机库,java,java-native-interface,rxtx,Java,Java Native Interface,Rxtx,我目前正在OS X上开发,并试图用System.load加载librxtxSerial.jnilib,但这不起作用,而且总是导致 java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver 当我将lib放在/Library/Java/Extensions中时,一切正常。 我已经仔细检查了路径和所有内容,但是当我从/Library/Jav
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
当我将lib放在/Library/Java/Extensions中时,一切正常。
我已经仔细检查了路径和所有内容,但是当我从/Library/Java/Extensions中删除lib时,它就不能与System.load一起工作
我想将jnilib与一个可分发的jar捆绑在一起,这就是我想以编程方式加载它的原因
有人有想法吗?确保将您的库放在LD\u library\u路径上 在这里查看为macOS/Linux编写的大量与JNI相关的示例 我建议从简单的Hello world应用程序开始: 您可以在那里了解如何使用标准工具为macOS开发JNI 希望这有帮助。享受JNI带来的乐趣。如果您有:
root:
main.jar
libjni.jnilib
然后在根目录下运行代码,使用如下命令:
java -jar main.jar
在这种情况下,加载代码应该如下所示:
System.load("libjni.jnilib");
但是bot System.loadLibrary,load比loadLibrary更安全
建议将jni库的绝对路径传递到System.load
我在我的项目中使用了类似的东西:
/**
* To load the JNI library
* Created by ice1000 on 2017/1/6.
*
* @author ice1000
*/
@SuppressWarnings("WeakerAccess")
public final class Loader {
public final static String JNI_LIB_NAME;
private static boolean loaded = false;
/*
* maybe it's already loaded, so there should be a check
*/
static {
JNI_LIB_NAME = "libjni";
loadJni();
}
@NotNull
@Contract(pure = true)
private static String libraryName(@NonNls @NotNull String libName) {
String ___ = System.getProperty("os.name");
String fileName;
if (___.contains("Linux"))
fileName = libName + ".so";
else if (___.contains("Windows"))
fileName = libName + ".dll";
else // if (___.get("OSX"))
fileName = libName + ".dylib";
// else fileName = libName;
return new File(fileName).getAbsolutePath();
}
public static void loadJni() {
if (!loaded) {
System.load(libraryName(JNI_LIB_NAME));
loaded = true;
}
}
}
这是我的工作目录:
root:
javaClasses.jar
libjni.dll
libjni.so
libjni.dylib
希望这能帮助你