我正在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)
库:/
我在这里想念什么吗?我该怎么做才能使这项工作成功?
答案 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
应用程序之后,您还应该能够从顶层调用它。