Использование JPL с SWI-PROLOG в Mac OS - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь использовать 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: /

Я что-то здесь упускаю?Что я могу сделать, чтобы сделать эту работу?

1 Ответ

0 голосов
/ 23 сентября 2018

В 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.

...