簡體   English   中英

使用 JPL 連接 Java 和 Prolog 時出現問題

[英]Problem connecting Java and Prolog with JPL

我想使用 JPL 將 Java 和 Swi Prolog 連接在一起。 當我將庫添加到我在 Intellij 上的項目時,編譯了代碼,當我嘗試運行查詢時,出現運行時錯誤:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jpl in java.library.path: [C:\Program Files\Java\jdk-12\bin, C:\WINDOWS\Sun\Java\bin, C:\WINDOWS\system32, C:\WINDOWS, c:\swipl\bin, ${env_var:PATH}, .]
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:827)
at java.base/java.lang.System.loadLibrary(System.java:1902)
at org.jpl7.JPL.loadNativeLibrary(JPL.java:114)
at org.jpl7.fli.Prolog.<clinit>(Prolog.java:71)
at org.jpl7.Query.open(Query.java:369)
at org.jpl7.Term.textToTerm(Term.java:155)
at org.jpl7.Query.<init>(Query.java:169)
at Main.main(Main.java:7)

我有 swi prolog 64 位。

我試過卸載它並使用 32 位,但它沒有用。

到目前為止我做了什么:

我將 SWI_HOME_DIR 添加到我的環境變量中。 我還將 swi 路徑添加到 Path 變量。 我將 jpl 庫添加到我的項目中(並成功添加了它)。

我試圖運行的代碼:

import org.jpl7.*;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Query q = new Query("true");
        q.hasSolution();

        Map<String,Term>[] res = q.allSolutions();

        for (int i = 0; i < res.length; i++) {
            System.out.println(res[i]);
        }
    }
}

因此,在任何列出的目錄中是jpl.dll

C:\Program Files\Java\jdk-12\bin   ... probably not 
C:\WINDOWS\Sun\Java\bin            ... probably not
C:\WINDOWS\system32                ... probably not
C:\WINDOWS                         ... probably not
c:\swipl\bin                       ... apparently yes as c:\swipl\bin\jpl.dll exists?
${env_var:PATH}                    ... apparently not

在您的 Java 程序中嘗試這個問題的建議:

File nativeFile = new File(filename + ".dll");
    if (!nativeFile.exists())
        System.exit(1);

System.load(nativeFile);

請注意,只有jpl.jar是不夠的。 也需要jpl.dll文件。 jpl.jar適用於 Java-Prolog 橋接的 Java 部分,但為了能夠調用非 JVM 編譯,我們需要進入系統級細節,因此是 dll 文件。

請參閱此處的故障排除提示: JPL 為用戶部署 - 在 Windows 上

從上面的頁面:

如果 Java 示例抱怨

The dynamic link library libpl.dll could not be found in the specified path

或者

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\\paul\\bin\\jpl.dll: Can't find dependent libraries

那么PATH上的任何文件夾中都沒有 SWI-Prolog 庫libpl.dll :您應該有一個PATH條目,例如C:\\Program Files\\pl\\bin

libpl.dll應該包含 SWI-Prolog 本身的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM