我下载了最新版本的 SWI-Prolog 并按照说明进行构建。没问题,所有测试都正常。我开发了一个用 Prolog 编写的工具,它利用 Python 例程使用 process/2 内置函数来调用它。它运作良好。
当我尝试使用 JPL 从 Java 接口调用 Prolog 代码时出现问题。一切都很顺利,直到 Prolog 尝试执行对 Python 例程的调用:Java 无法执行“process/2”SWI-Prolog 内置函数。
错误的回溯如下:
ERROR: /usr/local/lib/swipl/library/process.pl:57:
/usr/local/lib/swipl/library/process.pl:57: Initialization goal raised exception:
'$open_shared_object'/3: /usr/local/lib/swipl/lib/x86_64-linux/process.so: undefined symbol: Sfilefunctions
ERROR: Exported procedure process:process_kill/2 is not defined
ERROR: Exported procedure process:process_group_kill/2 is not defined
ERROR: Exported procedure process:process_set_method/1 is not defined
ERROR: Exported procedure process:process_wait/3 is not defined
Exception in thread "main" org.jpl7.PrologException: PrologException: error(existence_error(procedure, ':'(process, '/'(process_create, 2))), context(':'(process, '/'(process_create, 3)), _0))
at org.jpl7.Query.fetchNextSolution(Query.java:437)
at org.jpl7.Query.hasMoreSolutions(Query.java:341)
at org.jpl7.Query.hasNext(Query.java:240)
at org.jpl7.Query.allSolutions(Query.java:621)
at com.frantiz.pipeline.tools.PrologCodeLauncher.executeAnaphoraRes(PrologCodeLauncher.java:49)
at com.frantiz.pipeline.tools.PrologCodeLauncher.executeCode(PrologCodeLauncher.java:26)
at com.frantiz.pipeline.Pipeline.main(Pipeline.java:42)
我已经仔细检查了and 变量中and的libjpl.so
存在。实在是摸不着头脑。libswipl.so
$LD_PRELOAD
$LD_LIBRARY_PATH
任何帮助表示赞赏,谢谢。