如何解决使用JPL连接Java和Prolog时出现问题
我想使用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序言。
我尝试卸载它并使用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程序中尝试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
然后您的任何文件夹中都没有SWI-Prolog库
libpl.dll
PATH
:您应该有一个PATH
条目,例如C:\Program Files\pl\bin
。
libpl.dll
应该包含SWI-Prolog本身的代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。