首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jffi / jnr处理SIGSEGV?

如何使用jffi / jnr处理SIGSEGV?
EN

Stack Overflow用户
提问于 2022-03-22 07:20:18
回答 1查看 72关注 0票数 -1

Java与码头容器中的SIGSEGV崩溃。在所有其他系统上,它正在按预期工作。

代码语言:javascript
复制
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000000007966, pid=188, tid=189
#
# JRE version: OpenJDK Runtime Environment Temurin-17.0.2+8 (17.0.2+8) (build 17.0.2+8)
# Java VM: OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (17.0.2+8, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# C  0x0000000000007966

和堆栈跟踪

代码语言:javascript
复制
Current thread (0x00007fbdfa103040):  JavaThread "main" [_thread_in_native, id=189, stack(0x00007fbdff179000,0x00007fbdff279ac8)]

Stack: [0x00007fbdff179000,0x00007fbdff279ac8],  sp=0x00007fbdff277c38,  free space=1019k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  0x0000000000007966

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  com.kenai.jffi.Foreign.invokeN3O1(JJJJJLjava/lang/Object;III)J+0
j  com.kenai.jffi.Invoker.invokeN3(Lcom/kenai/jffi/CallContext;JJJJILjava/lang/Object;Lcom/kenai/jffi/ObjectParameterStrategy;Lcom/kenai/jffi/ObjectParameterInfo;Ljava/lang/Object;Lcom/kenai/jffi/ObjectParameterStrategy;Lcom/kenai/jffi/ObjectParameterInfo;Ljava/lang/Object;Lcom/kenai/jffi/ObjectParameterStrategy;Lcom/kenai/jffi/ObjectParameterInfo;)J+126
j  de.digitalcollections.openjpeg.lib.libopenjp2$jnr$ffi$1.opj_read_header(Ljnr/ffi/Pointer;Ljnr/ffi/Pointer;Ljnr/ffi/byref/PointerByReference;)Z+190

我能用jffi / jnr解决这个问题吗?我怎样才能收到关于这个问题的更多细节?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-24 09:28:10

Linux上崩溃的原因是目标操作系统的本机库难以理解。本机库是用glibc编译的,操作系统是用musl编译的。在任何一个库中,它都不是一个bug。

为了解决这个问题,我们现在捆绑了这个库的第二个版本。并与以下代码不同:

代码语言:javascript
复制
ProcessBuilder builder = new ProcessBuilder( "ldd", "/bin/ls" );
Process process = builder.start();
InputStream input = process.getInputStream();
process.waitFor( 5, TimeUnit.SECONDS );
String content = new String( input.readAllBytes() );
LogManager.getConfigLogger().debug( content );
boolean isMuslLibrary = content.contains( "musl-" );

更多细节见本期评论:https://github.com/dbmdz/imageio-jnr/issues/192

开放是一个问题,为什么loadLibrary不抛出一个错误,或者一个Java如何找到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71568203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档