Java 运行时不会出现错误“没有这样的文件或目录”,尽管它存在并且是 x86_64

Java 运行时不会出现错误“没有这样的文件或目录”,尽管它存在并且是 x86_64

该文件存在,但当要求执行它时,bash 抱怨它不存在。

$ ./Libs/openjdk-1.8.0_60-eap/bin/java
bash: ./Libs/openjdk-1.8.0_60-eap/bin/java: No such file or directory

$ ls -l ./Libs/openjdk-1.8.0_60-eap/bin/java
-rwxr-xr-x 1 spacecamel spacecamel 7734 Mar  4 03:27 ./Libs/openjdk-1.8.0_60-eap/bin/java

我读过在 64 位系统上执行 32 位版本时会发生此问题。不幸的是,这似乎不是我的情况

$ file ./Libs/openjdk-1.8.0_60-eap/bin/java
./Libs/openjdk-1.8.0_60-eap/bin/java: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

$ uname -a
Linux <hostname> 3.14.34 #1-NixOS SMP Thu Jan 1 00:00:01 UTC 1970 x86_64 GNU/Linux

````

答案1

这确实是与错误架构相关的典型错误。但是,这也表明未找到运行可执行文件所需的必要库。

您需要将 Java 运行时的 x86-64 库添加到LD_LIBRARY_PATH,或将包含它们的目录添加到目录/etc/ld.so.conf.d/。为此,首先将您的路径转换./Libs/openjdk-1.8.0_60-eap为绝对路径。在我下面的建议中,我假设/opt/java/Libs/openjdk-1.8.0_60-eap

没有 root 访问权限(或用于测试)

export LD_LIBRARY_PATH=/opt/java/Libs/openjdk-1.8.0_60-eap
./Libs/openjdk-1.8.0_60-eap/bin/java

具有 root 访问权限

sudo -s
    echo /opt/java/Libs/openjdk-1.8.0_60-eap >>/etc/ld.so.conf.d/java
    ldconfig
./Libs/openjdk-1.8.0_60-eap/bin/java

答案2

你可以使用lddjava来查看是否缺少库。

您可以使用 strace 来查看文件是否丢失或者是否正在dlopen()运行某些文件。

相关内容