파일이 존재하지만 실행하라는 요청을 받으면 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()
무언가가 실행 중인지 확인할 수 있습니다.