Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java无法映射本机库_Java_Hdf5_Dynamic Linking_Hdf - Fatal编程技术网

Java无法映射本机库

Java无法映射本机库,java,hdf5,dynamic-linking,hdf,Java,Hdf5,Dynamic Linking,Hdf,我遇到一个问题,Java试图加载一个.so对象,但无法映射它,所以它崩溃了。在这种情况下如何调试 下面是命令(顺便说一句,尝试运行HDFView实用程序): /usr/lib/jvm/java-11-openjdk-amd64//bin/java -Djava.library.path=/usr/lib/jni/:/usr/lib/x86_64-linux-gnu/-Dswing.systemlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel-class

我遇到一个问题,Java试图加载一个.so对象,但无法映射它,所以它崩溃了。在这种情况下如何调试

下面是命令(顺便说一句,尝试运行HDFView实用程序):

/usr/lib/jvm/java-11-openjdk-amd64//bin/java -Djava.library.path=/usr/lib/jni/:/usr/lib/x86_64-linux-gnu/-Dswing.systemlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel-classpath/usr/share/java/jhdf.jar:/usr/share/java/jhdf5.jar:/usr/share/java/jhdfobj.jar:/usr/share/java/jhdf4obj.jar:/usr/share/java/jhdfview.jar:/usr/share/java/jgraph.jar:/usr/share/java/slf4j-api.jar:/usr/share/java/slf4j-nop.jar ncsa.hdf.view.HDFView-root/usr/share/doc/libjhdf-doc/

以下是错误输出:

线程“main”java.lang.UnsatifiedLinkError中出现异常: /usr/lib/jvm/java-11-openjdk-amd64/lib/libawt_xawt.so:libxcb.so.1: 无法从上的共享对象映射段 java.base/java.lang.ClassLoader$nativelLibrary.load0(本机方法)位于 java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430) 在 java.base/java.lang.ClassLoader$NativelLibrary.loadLibrary(ClassLoader.java:2487) 在 java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684) 位于java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2617) 位于java.base/java.lang.Runtime.load0(Runtime.java:767) java.base/java.lang.System.load(System.java:1831)位于 java.base/java.lang.ClassLoader$nativelLibrary.load0(本机方法)位于 java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430) 在 java.base/java.lang.ClassLoader$NativelLibrary.loadLibrary(ClassLoader.java:2487) 在 java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684) 位于java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2638) 位于java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829) java.base/java.lang.System.loadLibrary(System.java:1867)位于 java.desktop/java.awt.Toolkit$3.run(Toolkit.java:1395)位于 java.desktop/java.awt.Toolkit$3.run(Toolkit.java:1393)位于 java.base/java.security.AccessController.doPrivileged(本机方法) 位于java.desktop/java.awt.Toolkit.loadLibraries(Toolkit.java:1392) java.desktop/java.awt.Toolkit.(Toolkit.java:1425)位于 java.desktop/java.awt.Component(Component.java:621)

其他有趣的事实:
  • 使用前面的“sudo”运行相同的命令会产生相同的错误 但是有一个不同的图书馆

  • 在第一次使用“sudo su”提升后运行相同的命令 无错误,尽管应用程序未按预期运行

  • 图书馆拥有阅读权限。我试着把他们提升到 执行权限,但这并没有改变任何内容

  • 在ValGrind中运行该命令会产生大量 投诉填满了输出,但最终运行了应用程序,而不是 撞车

  • 我在使用gdb连接到进程和提取时遇到问题 信息

  • 我已经阅读了glibc和openjdk11的源代码,但没有发现任何错误 洞察力Strace和ltrace似乎帮不上忙

  • 许多这样的问题涉及类路径和库路径问题,但是 这似乎不是问题所在。据我所知,它正在寻找 这些库很好,但是它无法映射它们

  • 库位于未装入noexec的文件系统中

评论请求的输出 来自ldd/usr/lib/jvm/java-11-openjdk-amd64/lib/libawt_xawt.so

linux-vdso.so.1 (0x00007ffda2ffd000)
libgtk3-nocsd.so.0 => /usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 (0x00007f6efd9b0000)     
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6efd612000)   
libawt.so => /usr/lib/jvm/java-11-openjdk-amd64/lib/libawt.so (0x00007f6efd342000)  
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f6efd130000)     
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f6efcdf8000)   
libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f6efcbee000)   
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6efc9ea000)     
libXtst.so.6 => /usr/lib/x86_64-linux-gnu/libXtst.so.6 (0x00007f6efc7e4000)     
libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007f6efc5d4000)     
libjava.so
    => /usr/lib/jvm/java-11-openjdk-amd64/lib/libjava.so (0x00007f6efc3a7000)   
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6efc188000)   
libc.so.6
    => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6efbd97000)     
/lib64/ld-linux-x86-64.so.2 (0x00007f6efde1a000)    
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f6efbb6f000)   
libjvm.so => not found  
libverify.so => /usr/lib/jvm/java-11-openjdk-amd64/lib/libverify.so (0x00007f6efb960000)    
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f6efb75c000)   
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f6efb556000)   
libjvm.so => not found  
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f6efb341000)    
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f6efb139000)
文件-L/usr/lib/x86_64-linux-gnu/libxcb.so.1的输出:

/usr/lib/x86_64-linux-gnu/libxcb.so.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=4cc7a1f024b6a0511ed01e149f2f198c2532e5fd, stripped
因为它说需要libjvm,所以我切换到openjdk-8,它有libjvm.so。然后结果出来了

GLib (gthread-posix.c): Unexpected error from C library during 'malloc': Cannot allocate memory.  Aborting.

对此,在调用中添加了-Xmx500M(使用Java的任意一个版本),并且它在没有诊断的情况下运行。但是,该应用程序不起作用。例如,我可以查看HDF5文件,但它声称该文件为空,而不是。它也不能创建新文件,这两个文件都是此应用程序的标准功能。因此,我不确定我是否刚刚掩盖了问题或解决了问题。

ldd/usr/lib/jvm/java-11-openjdk-amd64/lib/libawt_xawt.So和
文件-L/usr/lib/x86_64-linux-gnu/libxcb.So.1的输出是什么?(请用以上信息更新您的问题)。@EmployedRussian完成。