dhelpen在Rhel 7.2上失败,64位为libjvm.so

问题描述:

我在64位java进程中在RHEL 64上调用dlopen ("libjvm.so", RTLD_NOLOAD)。它失败,错误:dhelpen在Rhel 7.2上失败,64位为libjvm.so

libjvm.so: invalid mode for dlopen(): Invalid argument 

我做lsof -p <pid of java process>,它显示libjvm.so,装载模块。 libjvm.so从路径jre1.8.0_121/lib/amd64/server/libjvm.so加载。 无法找到有关该错误的更多信息。当使用32位版本的java时,同样的事情可以正常工作。其中libjvm.so正从lib/i386/client目录加载。欣赏任何关于在哪里寻找原因的指针或这个错误的真正含义。谢谢。

invalid mode for dlopen()

这是正确的错误:您使用无效模式调用dlopen

dlopen man page

One of the following two values must be included in flags: 
    RTLD_LAZY ... 
    RTLD_NOW ...    
+0

感谢您的答复。让我给它一个镜头..但同样的事情工作正常使用32位Java进程..。我不想加载该库..我只想得到处理已加载的那个。 – Prakash

+0

感谢您的回复.. RTLD_LAZY | RTLD_NOLOAD正在工作..我不知道为什么这应该是必需的64x ..在32它只与RTLD_NOLOAD .. – Prakash

+0

我只检查GLIBC来源,并检查“RTLD_ {NOW,LAZY}之一'必须设置“是在1998年添加的。我没有解释为什么这在32位模式下适用于您;它不应该。在我的系统上尝试“dlopen”(“libc.so.6”,RTLD_NOLOAD)的简单测试在32位和64位模式下均失败。 –