[英]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.