簡體   English   中英

錯誤:在檢查 jps 時找不到 libjava.so

[英]Error: could not find libjava.so while checking for jps

我正在使用 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 快速找到答案,在限制 output 時更容易,例如:

strace -f -e execve,open jps

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM