JNI UnsatisfiedLinkError loadLibrary总是失败

 2023-01-20    256  

问题描述

我正在尝试获得一个简单的JNI示例,但是无论我做什么,我都无法使用LoadLibrary命令使其工作.如果我指定.SO文件的绝对路径并使用System.load而不是System.LoadLibrary.

,它可以完美工作.

JNI UnsatisfiedLinkError 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(尤其是删除lib前缀和.so后缀);如您在代码中所见,我已经在这样做了.不管.so文件在当前目录中,当前目录在java.library.path上,并且我以我所看到的方式在线上调用了LoadLibrary,这都不适用.

知道我做错了什么?

推荐答案

我会检查以下内容:

  1. 您确定Java进程的当前目录与 *.SO文件相同吗?有时,包装脚本可以更改它?
  2. 它是否使用java TranslatorWrapper -Djava.library.path=/path/to/example TranslatorWrapper
  3. 工作

  4. 如果您正在运行Mac OS X,请参见 http:http://developer. Apple.com/java/faq/development.html#anchor4 文件后缀应为.jnilib(或.dylib),而不是.so
  5. 如果运行Linux,您是否尝试过将/path/to/example/附加到ld_library_path

以上所述是小编给大家介绍的JNI UnsatisfiedLinkError loadLibrary总是失败,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26111.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。