“线程中的异常”;“主要”;java.lang.UnsatifiedLink错误:java.library.path中没有indri_jni

“线程中的异常”;“主要”;java.lang.UnsatifiedLink错误:java.library.path中没有indri_jni,java,Java,我正在使用狐猴工具,我遇到了一些问题 当我执行代码时,java会抱怨 Exception in thread "main" java.lang.UnsatisfiedLinkError: no indri_jni in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886) at java.lang.Runtime.loadLibrary0(Runtime.java:849) at java.la

我正在使用狐猴工具,我遇到了一些问题

当我执行代码时,java会抱怨

Exception in thread "main" java.lang.UnsatisfiedLinkError: no indri_jni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at lemurproject.indri.indriJNI.<clinit>(indriJNI.java:109)
at lemurproject.indri.IndexEnvironment.<init>(IndexEnvironment.java:39)
at indritest.main(indritest.java:9)
我正在使用 jdk 1.8.0_11 x64bit, windows 7 ultimate x64位, indri5.7 x64位, eclipsejunox64bit

徖。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 编辑:-

我使用了拉尔夫·瓦格纳给出的解决方案,现在我的控制台显示了这个Bug。 在控制台中打印System.getProperty(“java.library.path”)之后,我得到了这个输出。system32文件夹中已存在indri_jni.dll

我的密码

 import lemurproject.indri.*;
public class indritest
{
    public static void main ( String[] args ) 
    {
        try {
            System.out.println(System.getProperty("java.library.path"));
            //System.loadLibrary("indri_jni");
            String [] stopwords = {"a", "an", "the", "of"};
            IndexEnvironment env = new IndexEnvironment();
            env.setStoreDocs(true);
            env.setStopwords(stopwords);
            env.create("aaa"); 
            env.addFile("trekfile.txt", "booomer.txt");
            env.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
我的控制台坏了

  C:\Program Files\Java\jdk1.8.0_11\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\DMIX;C:\Program Files\Indri\Indri 5.7\bin;C:\Program Files\Java\jdk1.8.0_11\bin;.
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files\Indri\Indri 5.7\bin\indri_jni.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1929)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1847)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1119)
    at lemurproject.indri.indriJNI.<clinit>(indriJNI.java:109)
    at lemurproject.indri.IndexEnvironment.<init>(IndexEnvironment.java:39)
    at indritest.main(indritest.java:10)
C:\ProgramFiles\Java\jdk1.8.0\u 11\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\DMIX;C:\ProgramFiles\Indri\Indri 5.7\bin;C:\ProgramFiles\Java\jdk1.8.0\u 11\bin;。
线程“main”java.lang.UnsatifiedLink中出现异常错误:C:\Program Files\Indri\Indri 5.7\bin\Indri\u jni.dll:找不到依赖库
位于java.lang.ClassLoader$NativeLibrary.load(本机方法)
位于java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1929)
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1847)
位于java.lang.Runtime.loadLibrary0(Runtime.java:870)
位于java.lang.System.loadLibrary(System.java:1119)
位于lemurproject.indri.indriJNI.(indriJNI.java:109)
位于lemurproject.indri.IndexEnvironment.(IndexEnvironment.java:39)
在indritest.main(indritest.java:10)

除了项目中的Java类之外,您还使用本机库,即非Java编写的库。 您需要将本机库添加到类路径中,并且可能需要在使用任何类(如
IndexEnvironment
)之前通过调用

System.loadLibrary("<NAME OF THE LIBRARY>");
System.loadLibrary(“”);

从堆栈跟踪中,我猜库名为“indri_jni”,因此我认为在Windows上,应该将“indri_jni.dll”添加到Windows路径中。这通常包括应用程序的工作目录,因此您可能必须将库放在其中,或将找到库的目录添加到path环境变量中。

(1)将本机库放在类路径上没有帮助。在Windows上,本机库必须位于
路径上
。打印出
System.getProperty(“java.library.path”)
以查看是否正确设置了路径。(2) 没有必要自己加载库-正如您从stacktrace中看到的那样,
IndexEnvironment
类通过
indriJNI
类加载库本身。Luke:(1)您是对的,我更改了描述。Luke:(2)再次正确,这实际上没有必要。但我更希望代码尽早失败,并在code.java-Djava.library.path=“”–jar中清楚地显示依赖关系。这可能会有所帮助。在
indri_jni.dll
上运行dependency Walker,看看它需要哪些dll,而您没有。另请参见感谢frnds,我在dependency walker的帮助下清除了我的错误。。。卢克·伍德沃德和拉尔夫·旺格。
System.loadLibrary("<NAME OF THE LIBRARY>");