我正在开发一个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容器因致命错误而终止 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)