错误:检查jps时找不到libjava.so

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:检查jps时找不到libjava.so相关的知识,希望对你有一定的参考价值。

我正在使用centOS 6.10

ls /usr/lib/jvm     

O / P:java-1.6.0-openjdk-1.6.0.41.X86_64java-1.7.0-openjdk-1.7.0.181.X86_64java-1.7.0-openjdk-1.7.0.261.X86_64

java -version

O / P:java版本“ 1.7.0_181”

在检查jps时,我会变成这样,

jps    

O / P:错误:找不到libjava.so错误:找不到Java SE运行时环境。

我的bashrc文件是,

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261.X86_64/    
export HADOOP_INSTALL=/usr/local/hadoop    
export PATH=$PATH:$HADOOP_INSTALL/bin  

我不知道为什么出现此错误。因此,我为此感到沮丧,因为我正在寻找解决方案超过3天。任何帮助将非常感激。

提前感谢!

答案

我发现与Java相关的进程有时在库方面很古怪。

首先确定libjava.so的路径,并确认lib和可执行文件相同,是32位或64位之一:

file /path/to/libjava.so /other/path/to/jps

接下来,以jps为例,请运行以下程序:

ldd /some/path/jps

运行时链接编辑器应为可执行文件引用的每个库列出abs路径,如果找不到,则显示错误。发生错误时,该库丢失或存在于链接编辑器的搜索路径之外的目录中。对于正常进程,设置LD_LIBRARY_PATH通常是可行的,但是Java东西通常很古怪。尝试尝试使用cmd-line或脚本,例如:

#!/bin/bash
LD_LIBRARY_PATH=/usr/local/lib64 /full/path/to/jps $*

((将/ usr / local / lib64替换为libjava.so的前导路径)。注意,不需要一个独立的“ export KEY = val”,它将信息添加到环境中并被随后的任何进程继承;如图所示,外壳程序仅对cmd行设置了KEY = val。

某些与Java相关的怪癖是清除环境或在自己的子进程中重置诸如LD_LIBRARY_PATH之类的进程,或者使用NULL envp调用execve()的子进程,然后该子进程失败,如您所描述。在这种情况下,您可能不得不诉诸将libs移至特定目录,或修改列出lib dirs的与Java相关的配置文件。

有时可以通过strace找到快速答案,在限制输出时变得更加容易,例如:

strace -f -e execve,open jps

以上是关于错误:检查jps时找不到libjava.so的主要内容,如果未能解决你的问题,请参考以下文章

UnhandledPromiseRejectionWarning:错误:当我尝试运行我的代码时找不到模块'../database/db'

Logstash:“错误:运行logstash.bat时找不到或加载主类Heal”

Swift WKWebView:调用方法时找不到变量错误

尝试播放音频时找不到文件错误(Obj-C)

导入具有导出枚举的模块时找不到模块错误

运行不和谐机器人时找不到模块“节点:事件”错误