Ошибка конфигурации 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. Три вещи, которые нужно запомнить:
добавьте новую переменную SWI_HOME_DIR под системные переменные в переменных окружения и установите путь к месту, где вы установили SWI-Prolog (у меня D:\swipl);
Добавьте путь%SWI_HOME_DIR%\bin к переменной PATH, а не используйте что-то вроде "D:\swipl\bin". (В противном случае произойдет [FATAL ERROR: Не удалось найти системные ресурсы])
Добавьте путь%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
,
Отлично Отлично, ответ второй - это решение
- создать переменную SWI_HOME_DIR для установки каталога установки пролога swi_HOME_DIR ------- C:\Program Files\swipl
- установите 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.