gpt4 book ai didi

java - JNI - UnsatisfiedLinkError - loadLibrary 总是失败

转载 作者:搜寻专家 更新时间:2023-11-01 01:30:07 26 4
gpt4 key购买 nike

我试图让一个简单的 JNI 示例正常工作,但无论我做什么,我都无法使用 loadLibrary 命令让它正常工作。如果我指定 .so 文件的绝对路径并使用 System.load 而不是 System.loadLibrary,它会完美运行。

这是我的目录树:

.
|-- -
|-- TranslatorWrapper.c
|-- TranslatorWrapper.class
|-- TranslatorWrapper.cpp
|-- TranslatorWrapper.h
|-- TranslatorWrapper.java
`-- libTranslatorWrapper.so

Java代码如下:

public class TranslatorWrapper {

public native String translate(byte[] bytes);

public static void main(String[] args) {
TranslatorWrapper w = new TranslatorWrapper();
System.out.println("From JNI: " + w.translate(null));
}
static {
System.out.println("Attempting to load library from " + System.getProperty("java.library.path"));
System.loadLibrary("TranslatorWrapper");
//System.load("/path/to/example/libTranslatorWrapper.so");
}
}

我知道 .so 文件需要在 java.library.path 文件夹中,所以我用参数启动程序

java TranslatorWrapper -Djava.library.path=.

因为库与 .class 文件位于同一目录中。但是,似乎忽略了该值:

Attempting to load library from .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
Exception in thread "main" java.lang.UnsatisfiedLinkError: no TranslatorWrapper in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1754)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
at TranslatorWrapper.<clinit>(TranslatorWrapper.java:14)

请注意,我的命令行参数并未更改 java.library.path 变量。

我还知道您调用 loadLibrary 时使用了与load 不同的参数(特别是删除了 lib 前缀和 .so 后缀);正如您在代码中看到的那样,我已经在这样做了。不管 .so 文件在当前目录中,当前目录在 java.library.path 中,以及我以我在网上看到的方式调用 loadLibrary,这些都不起作用.

知道我做错了什么吗?

最佳答案

我会检查以下内容:

  1. 你确定java进程的当前目录和*.so文件一样吗?有时,包装器脚本可以改变这种情况?
  2. 是否使用 java TranslatorWrapper -Djava.library.path=/path/to/example TranslatorWrapper
  3. 如果您运行的是 Mac OS X,请参阅 http://developer.apple.com/java/faq/development.html#anchor4文件后缀应该是.jnilib(或.dylib)而不是.so
  4. 如果运行 Linux,您是否尝试过将 /path/to/example/ 附加到您的 LD_LIBRARY_PATH

关于java - JNI - UnsatisfiedLinkError - loadLibrary 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com