【发布时间】:2020-08-29 22:35:31
【问题描述】:
我在我的 AIX 系统上的 libjvm.so 文件上执行了一个 dump-H,它得到了以下输出,据我所知,dump 命令相当于 Linux 上的 ldd 命令,用于显示依赖的共享库,但是下面的输出显示了 32 位和 64 位组件,我真的不明白 shr_64.o 是什么意思?这是否意味着 libi5soenv.so 文件不是 64 位的?
/osxpf/v7r4m0.cuep/bld/shadow/pase.pgm/p5.cuep/compilers/vac1313/opt/IBM/xlc/13.1.3/../../../../usr/lpp/xlC/lib:/osxpf/v7r4m0.cuep/bld/shadow/pase.pgm/p5.cuep/compilers/vac1313/opt/IBM/xlC/13.1.3/lib/aix61:/osxpf/v7r4m0.cuep/bld/shadow/pase.pgm/p5.cuep/compilers/vac1313/opt/IBM/xlC/13.1.3/lib:/osxpf/v7r4m0.cuep/bld/shadow/pase.pgm/p5.cuep/compilers/vac1313/opt/IBM/xlc/13.1.3/lib/aix61:/osxpf/v7r4m0.cuep/bld/shadow/pase.pgm/p5.cuep/compilers/vac1313/opt/IBM/xlc/13.1.3/lib:/osxpf/v7r4m0.cuep/bld/shadow/pase.pgm/p5.cuep/compilers/vac1313/usr/vac/lib/aix53:/afs/rchland.ibm.com/usr8/j9/jdk71-32bit-sdk/sdk/jre/lib/ppc/j9vm:/afs/rchland.ibm.com/usr8/j9/jdk71-32bit-sdk/sdk/jre/lib/ppc:/afs/rchland.ibm.com/usr8/j9/jdk71-32bit-sdk/sdk/jre/../lib/ppc:/usr/lib
1 libdl.a shr_64.o
2 libc_r.a shr_64.o
3 libi5osenv.so
【问题讨论】:
-
它依赖于三个共享对象,它们都是 64 位的,前两个存在于 .a 存档中,第三个是独立的。
-
感谢 Lorinczy,我的确切问题是,我试图从 C++ 代码启动 JVM,并且一旦我启动它,JVM 就会崩溃,在检查共享库时,我想出了上面的列表,所以这是否意味着我需要从存档中提取这些文件?以便JVM可以使用它?
-
当然不是,它应该按原样工作。但是您应该知道,Java 和 C++ 都很庞大,并且都有许多可能发生冲突的怪癖(AIX 也是如此)。如果是我,我会先启动 JVM,然后通过 JNI 调用 C-code。
-
你能告诉我如何调试 JVM 崩溃吗?它会生成 3 个文件,即核心、转储和 trc 文件,我尝试在我的 AIX 服务器上使用 javadumpviewer 来检查转储文件,但 iam无法理解这些六进制代码的含义以及如何找出 JVM 崩溃的原因?我可以提供 C++ 代码和日志文件以供审查。
-
如果你有一个
core文件,你可以尝试gdb来检查它:gdb <executable> core。在 gdb 命令中bt可能会提供一些信息,特别是如果您使用选项-g编译程序时@
标签: aix