首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JPL连接Java和Prolog时出现的问题

用JPL连接Java和Prolog时出现的问题
EN

Stack Overflow用户
提问于 2020-09-12 02:05:41
回答 1查看 327关注 0票数 1

我想使用JPL将Java和Swi Prolog连接在一起。当我将库添加到Intellij上的项目中时,代码被编译,当我试图运行查询时,我得到了一个运行时错误:

代码语言:javascript
复制
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库添加到我的项目中(并且它成功地添加了它)。

我试图运行的代码如下:

代码语言:javascript
复制
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]);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-09-12 02:29:53

那么,jpl.dll是否位于任何列出的目录中:

代码语言:javascript
复制
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的建议:

代码语言:javascript
复制
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本身的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63852186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档