Я пытаюсь использовать jpl с swi-прологом в Mac OS High Sierra, и у меня возникают проблемы.Фактически, сначала 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-пролога перемещаема (и поэтому имеет путь относительно исполняемого файла).
Вывод otool -L
из libjpl.dylib
дает мнеэти выходные данные:
/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.
Дело в том, что ни macport, ни homebrew-версия swi-пролог содержит библиотеку libjpl.dylib
: /
Я что-то здесь упускаю?Что я могу сделать, чтобы сделать эту работу?