Ошибка конфигурации JPL/SWI Prolog

Я сейчас настраиваю JPL и хочу работать с swi-прологом, используя Java.

Я скачал последнюю стабильную версию SWI-Prolog, которая является 6.2.0, и установлен в D:\swipl

Сначала я добавил следующий путь к переменной PATH: D:\swipl\bin, который должен включать все необходимые файлы dll.

Затем я добавил следующий путь к CLASSPATH: D:swipl\lib\jpl.jar, который должен быть необходимым файлом jar.

Когда я попытался запустить предоставленный пример версий, я получил следующую ошибку:

Exception in thread "main" java.lang.UnsatisfiedLinkError: jpl.fli.Prolog.thread_self()I
    at jpl.fli.Prolog.thread_self(Native Method)
    at jpl.Query.open(Query.java:286)
    at jpl.Util.textToTerm(Util.java:162)
    at jpl.Query.Query1(Query.java:183)
    at jpl.Query.<init>(Query.java:176)
    at Versions.main(Versions.java:11)

После поиска в Интернете, я обнаружил, что многие люди просто получают java.lang.UnsatisfiedLinkError: no jpl in java.library.path что из-за настройки для PATH переменная, а не ошибка, которую я получаю здесь: java.lang.UnsatisfiedLinkError: jpl.fli.Prolog.thread_self()I (и да, в конце строки есть "я").

Кто-нибудь получил эту ошибку раньше? Я пробовал несколько предыдущих версий SWI-Prolog, но также получил другие виды ошибок. Я использую Eclipse IDE для разработки Java - я что-то пропустил?

4 ответа

Решение

Я отправил проблему в официальный список рассылки (swi-prolog@lists.iai.uni-bonn.de), предоставленный swi-prolog.org, и, к счастью, кто-то помог мне доказать, что в версии 6.2 есть некоторые проблемы +0,0. Затем мы оба попробовали версию 6.0.2, и она отлично работает. Он упомянул, что (и я это заметил) в папке bin версии 6.2.0 нет файла swipl.dll, что МОЖЕТ вызвать проблему.

Я уже сообщал об этой проблеме сотрудникам по электронной почте, и, по крайней мере, на данный момент, я предлагаю тем, кто хочет настроить JPL, загрузить версию 6.0.2. Три вещи, которые нужно запомнить:

  1. добавьте новую переменную SWI_HOME_DIR под системные переменные в переменных окружения и установите путь к месту, где вы установили SWI-Prolog (у меня D:\swipl);

  2. Добавьте путь%SWI_HOME_DIR%\bin к переменной PATH, а не используйте что-то вроде "D:\swipl\bin". (В противном случае произойдет [FATAL ERROR: Не удалось найти системные ресурсы])

  3. Добавьте путь%SWI_HOME_DIR%\lib\jpl.jar в переменную PATH, а не используйте что-то вроде "D:\swipl\lib\jpl.jar". (В противном случае произойдет [FATAL ERROR: Не удалось найти системные ресурсы])

Если вы используете Eclipse для разработки на Java, похоже, вам не нужно настраивать в вашей IDE. Если вы выполните 3 вышеуказанных шага и добавите правильный файл JAR в качестве внешней библиотеки, все будет в порядке.

Я не уверен, работает ли временное решение для всех, но определенно, каждый, у кого есть проблема, должен сначала попробовать этот метод. Пока проблема в версии 6.2.0 выяснена, я буду добавлять некоторые комментарии здесь.

Кстати, насколько я знаю, до сих пор люди, у которых есть проблема, используют 32-битную Windows.

Попробуйте добавить свой путь к java.library.path через Run > Run Configuration > [имя проекта] и добавьте следующее во вкладку "VM Arguments".

-Djava.library.path="D:\swipl\bin;."

Кроме того, на вкладке "Среда" добавьте следующее:

VARIABLE: PATH
VALUE: D:\swipl\bin;${env_var:PATH}

После этого перейдите в "Проект"> "Свойства"> "Путь сборки Java", перейдите на вкладку "Библиотеки". Нажмите "Добавить внешние JARS.." и найдите свой jpl.jar,

Отлично Отлично, ответ второй - это решение

  1. создать переменную SWI_HOME_DIR для установки каталога установки пролога swi_HOME_DIR ------- C:\Program Files\swipl
  2. установите PATH так, чтобы он указывал на библиотеку, а bin - как PATH ------ %SWI_HOME_DIR%\bin;%SWI_HOME_DIR%\lib\jpl.jar

Это исправило мою проблему "Исключение в потоке"main" java.lang.UnsatisfiedLinkError: нет jpl в окнах java.library.path", это немного редко, но работает найти.

У меня такая же проблема. Помимо настройки PATH, вам необходимо проверить, имеет ли установленная SWI-программа ту же архитектуру (32 или 64), что и ваша JVM.

Другие вопросы по тегам