【发布时间】:2026-01-23 18:45:01
【问题描述】:
我正在尝试在 macOS High Sierra 上将 JPL 与 SWI-Prolog 一起使用,但遇到了麻烦。事实上,一开始没有找到libjpl.dylib,所以我将它的路径添加到java.library.path via
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 可重定位(因此具有相对于可执行文件的路径)造成的。
libjpl.dylib 的otool -L 的输出给我这个输出:
/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)
因此修复它的一种方法是通过 macport 或 homebrew 安装不可重定位的版本。
问题是,MacPorts 和 Homebrew 版本的 SWI-Prolog 都不包含 libjpl.dylib 库:/
我在这里遗漏了什么吗?我可以做些什么来完成这项工作?
【问题讨论】:
标签: java prolog swi-prolog dylib jpl