2012-09-05 137 views
1

我现在正在配置JPL,并想使用java来使用swi-prolog。JPL/SWI Prolog配置失败

我下载SWI-Prolog的,这是6.2.0的最新的稳定版本,并安装在d:\ swipl

首先,我添加以下路径到PATH virable:d:\ swipl \ BIN ,它应该包含所有需要的dll文件。

然后,我添加了以下路径到CLASSPATH virable:D:swipl \ lib \ jpl.jar,它应该是需要的jar文件。

当我试图运行所提供的版本的例子中,我得到了以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: jpl.fli.Prolog.thread_self()I 
    at jpl.fli.Prolog.thread_self(Native Method) 
    at jpl.Query.open(Query.java:286) 
    at jpl.Util.textToTerm(Util.java:162) 
    at jpl.Query.Query1(Query.java:183) 
    at jpl.Query.<init>(Query.java:176) 
    at Versions.main(Versions.java:11) 

网上搜索后,我发现很多人只得到java.lang.UnsatisfiedLinkError: no jpl in java.library.path这是因为设置了PATH变量,而不是我在这里得到的错误:java.lang.UnsatisfiedLinkError: jpl.fli.Prolog.thread_self()I(是的,在行末有一个“I”)。

有没有人得到过这个错误?我已经尝试过几个以前的SWI-Prolog版本,但也有其他类型的错误。我正在使用Eclipse IDE进行Java开发 - 我错过了什么吗?

回答

3

我已将问题发送到swi-prolog.org提供的官方邮件列表([email protected]),幸运的是有人帮我证明存在一些问题在版本6.2.0中。然后我们都尝试了6.0.2版本,并且它完美地工作。他提到(我注意到)在版本6.2.0的bin文件夹中没有swipl.dll,这可能会导致该问题。

我已经通过电子邮件向员工汇报了问题,至少现在,我建议那些想要配置JPL的人应该下载6.0.2版本。有三件事要记住:

  1. 添加一个新的变量SWI_HOME_DIR下系统变量中的环境变量,并设置路径,您安装SWI-Prolog的地方(我的是d:\ swipl);

  2. 将路径%SWI_HOME_DIR%\ bin添加到PATH变量中,而不是使用类似于“D:\ swipl \ bin”的内容。 (否则,[致命错误:无法找到系统资源]会发生)

  3. 添加路径%SWI_HOME_DIR%\ LIB \ jpl.jar到PATH环境变量,而不是使用类似“d:\ swipl \ LIB \ jpl.jar”。 (否则,[致命错误:无法找到系统资源]会发生)

如果您使用的是Eclipse的Java开发,似乎你并不需要在你的IDE配置。只要你按照上面的3个步骤添加正确的jar文件作为外部库,它应该没问题。

我不确定临时解决方案是否适用于所有人,但绝对有问题的每个人都应该先尝试这种方法。只要在6.2.0版本中发现问题,我会在这里添加一些评论。

顺便说一句,据我所知,到目前为止,有这个问题的人都在使用32位Windows。

+0

这是我再一次在64位Windows下的错误已在6.2.1中得到修复,而32位Windows下的错误已在6.2.2中修复,这是最新的稳定版本到现在。 – user1649263

2

尝试通过运行>运行配置> [项目名称]将路径添加到java.library.path,并在“虚拟机参数”选项卡下添加以下内容。

-Djava.library.path="D:\swipl\bin;." 

此外, “环境” 选项卡下,添加以下内容:

VARIABLE: PATH 
VALUE: D:\swipl\bin;${env_var:PATH} 

之后,转至项目>属性> Java构建路径,选择 “库” 选项卡。 点击“添加外部JARS ..”,找到您的jpl.jar

+0

谢谢。我尝试了你的方法,但同样的错误发生了;然后我试图摆脱计算机属性中的环境变量下的PATH设置以避免冗余,并且我得到以下错误:线程“main”java.lang.UnsatisfiedLinkError中的异常:D:\ swipl \ bin \ jpl .dll:无法找到依赖库 – user1649263

0

伟大伟大伟大,第二个答案是解决

  1. 创建SWI_HOME_DIR变量设置SWI序言安装目录目录 SWI_HOME_DIR ------- C:\ Program Files文件\ swipl
  2. 集PATH指向图书馆和斌这样 PATH ------%SWI_HOME_DIR%\ BIN;%SWI_HOME_DIR%\ LIB \ jpl.jar

这解决我的问题“异常在线程 “主要的” java .lang.UnsatisfiedLinkError:java.lib中没有jpl rary.path窗口“这是有点罕见,但它的作品发现。

0

我有同样的问题。除了设置PATH之外,还需要验证已安装的SWI程序是否具有与JVM相同的体系结构(32或64)。