在Mac OS上将JPL与SWI-PROLOG一起使用

时间:2018-09-23 09:04:11

标签: java prolog swi-prolog jpl

我正在Mac OS High Sierra上尝试将spl-prolog与jpl一起使用,但遇到了麻烦。实际上,起初找不到libjpl.dylib,所以我通过

将其路径添加到java.library.path
java -Djava.library.path=/Applications/SWI-Prolog.app/Contents/swipl/lib/x86_64-darwin15.6.0/

现在找到了该库,但出现另一个错误:

java.lang.UnsatisfiedLinkError: /Applications/SWI-Prolog.app/Contents/swipl/lib/x86_64-darwin15.6.0/libjpl.dylib: dlopen(/Applications/SWI-Prolog.app/Contents/swipl/lib/x86_64-darwin15.6.0/libjpl.dylib, 1): Library not loaded: @executable_path/../swipl/lib/x86_64-darwin15.6.0/libswipl.dylib
  Referenced from: /Applications/SWI-Prolog.app/Contents/swipl/lib/x86_64-darwin15.6.0/libjpl.dylib
  Reason: image not found
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    ...

据我了解,这是由于此版本的swi-prolog可重定位(因此具有相对于可执行文件的路径)引起的。

otool -L的{​​{1}}的输出给我以下输出:

libjpl.dylib

因此,解决此问题的一种方法是通过macport或自制软件安装无法重定位的版本。

问题是,macport或swi-prolog的自制版本都不包含/Applications/SWI-Prolog.app/Contents/swipl/lib/x86_64-darwin15.6.0/libjpl.dylib: @rpath/libjsig.dylib (compatibility version 1.0.0, current version 1.0.0) @rpath/libjvm.dylib (compatibility version 1.0.0, current version 1.0.0) @executable_path/../swipl/lib/x86_64-darwin15.6.0/libswipl.dylib (compatibility version 0.0.0, current version 7.6.4) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1) 库:/

我在这里想念什么吗?我该怎么做才能使这项工作成功?

1 个答案:

答案 0 :(得分:1)

在macOS 10.13.6(High Sierra)上,我定期使用以下命令编译SWI-Prolog 7.x源:

$ make distclean && ./build && swipl -g "jpl_config_dylib" -t halt

jpl_config_dylib/0查找并修复Java路径。启动SWI-Prolog.app应用程序之后,您还应该能够从顶层调用它。