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.

루트 액세스 권한 없음(또는 테스트용)

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

루트 액세스 권한이 있어야 합니다.

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

java를 사용하여 ldd누락된 라이브러리가 있는지 확인할 수 있습니다.

strace를 사용하여 파일이 누락되었는지 또는 dlopen()무언가가 실행 중인지 확인할 수 있습니다.

관련 정보