我想使用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)我有64位的swi prolog。
我尝试卸载它,并使用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]);
}
}
}发布于 2020-09-12 02:29:53
那么,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程序中尝试来自this question的建议:
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 Deploying for users - on 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本身的代码。
https://stackoverflow.com/questions/63852186
复制相似问题