ファイルが存在するが実行するように要求された場合、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()
何かが実行されているかどうかを確認できます。