春季-具有SWI-Prolog的Docker容器因致命错误而终止

春季-具有SWI-Prolog的Docker容器因致命错误而终止,第1张

概述我正在开发一个Spring Boot Web应用程序,它使用SWI-Prolog的JPL接口从Java调用Prolog.在开发模式下,一切正常.当我将其部署到Docker时,通过API对JPL的首次调用运行良好.当我尝试再次调用JPL时,JVM崩溃.我使用LD_PRELOAD指向libswipl.soSWI_HOME_DIR也被设置.LD_LIBRARY_P

我正在开发一个Spring Boot Web应用程序,它使用SWI-Prolog的jpl接口从Java调用Prolog.在开发模式下,一切正常.
当我将其部署到Docker时,通过API对jpl的首次调用运行良好.当我尝试再次调用jpl时,JVM崩溃.

我使用LD_PRELOAD指向libswipl.so

SWI_HOME_DIR也被设置.

LD_liBRARY_PATH设置为指向libjvm.so

我的控制器功能:

@PostMapPing("/rules/testAPI/")@Timedpublic List<String> insertRule() {    String use_module_http = "use_module(library(http/http_open)).";    jpl.init();    query q1 = new query(use_module_http);    if (!q1.hasNext()) {        System.out.println("Failed to load http Module");    } else {        System.out.println("Succeeded to load http Module");    }    return null;}

控制台输出

第一次通话

Succeeded to load http Module

第二次通话

## A Fatal error has been detected by the Java Runtime Environment:##  SIGSEGV (0xb) at pc=0x00007f31705294b2,pID=16,tID=0x00007f30d2eee700## JRE version: OpenJDK Runtime Environment (8.0_191-b12) (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)# Java VM: OpenJDK 64-Bit Server VM (25.191-b12 mixed mode linux-amd64 compressed oops)# Problematic frame:# C  [libswipl.so+0xb34b2]  PL_thread_attach_engine+0xe2## Core dump written. Default location: //core or core.16## If you would like to submit a BUG report,please visit:#   http://BUGreport.java.com/BUGreport/crash.Jsp# The crash happened outsIDe the Java Virtual Machine in native code.# See problematic frame for where to report the BUG.#

我将错误日志文件上传到pastebin中. click here

有没有人遇到过同样的问题?有解决办法吗?

请注意,我也使用oracle-java-8进行了检查,但是发生相同的错误.

更新:

@CapelliC答案无效.

最佳答案我想我会尝试“使用”该术语.例如

query q1 = new query(use_module_http);if (!q1.hasNext()) {    System.out.println("Failed to load http Module");} else {    System.out.println("Succeeded to load http Module:"+q1.next().toString());    // remember q1.close() if there Could be multiple soultions}

或更好

if ((new query(use_module_http)).onesolution() == null) ...

还是更好

if ((new query(use_module_http)).hasSolution() == false) ...
总结

以上是内存溢出为你收集整理的春季-具有SWI-Prolog的Docker容器致命错误而终止 全部内容,希望文章能够帮你解决春季-具有SWI-Prolog的Docker容器因致命错误而终止 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存