java - 错误:在检查 jps 时找不到 libjava.so
问题描述
我正在使用centOS 6.10
ls /usr/lib/jvm
O/P:java-1.6.0-openjdk-1.6.0.41.X86_64 java-1.7.0-openjdk-1.7.0.181.X86_64 java-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
运行时链接编辑器应列出可执行文件引用的每个库的绝对路径,如果未找到,则显示错误。出现错误时,lib 丢失或存在于链接编辑器搜索路径之外的目录中。对于普通进程,设置 LD_LIBRARY_PATH 通常是可行的,但 java 的东西往往很古怪。尝试使用 cmd 行或脚本,例如:
#!/bin/bash
LD_LIBRARY_PATH=/usr/local/lib64 /full/path/to/jps $*
(将 /usr/local/lib64 替换为 libjava.so 的主要路径)。请注意,不需要独立的“export KEY=val”,它会将信息添加到环境中并被随后的任何进程继承;如图所示,shell 仅为命令行设置 KEY=val。
一些与 java 相关的怪癖是清除环境或在自己的子进程中重置诸如 LD_LIBRARY_PATH 之类的东西的进程,或者使用 NULL envp 调用 execve() ,然后子进程会按照您的描述失败。在这种情况下,您可能不得不求助于将库移动到特定目录,或修改列出 lib 目录的与 java 相关的配置文件。
有时可以使用 strace 快速找到答案,在限制输出时更容易,例如:
strace -f -e execve,open jps
推荐阅读
- c# - 为什么有些供应商将 Unicode 字符映射到另一个字符集(代码页)?
- vue.js - Vue引导表单标签允许重复
- python - 移位的使用
- c++ - 使用 Eclipse 格式化程序在列中对齐的枚举
- c++ - vs代码的终端和输出选项卡中是否有任何更新问题?
- java - 将日期四舍五入到一天结束
- laravel - Laravel Supervisor:如何按顺序处理某些工作?
- javascript - 如何在 JavaScript 中循环遍历数值(数字)?
- javascript - 如何将箭头函数作为常规函数的参数?
- javascript - 从 useState 设置状态而不触发 useEffect 钩子