Java установлена, в листинге, но выполнение выдает "./java: Нет такого файла или каталога" - PullRequest
16 голосов
/ 31 января 2012

Я только что запустил скрипт, приведенный ниже, и он выбирает и распаковывает JDK в нужное место.Проблема в том, что каждая команда java (скопированная в / urs / bin ) выдает ошибки.Затем я дважды проверяю, заходя в каталог установки JDK с помощью cd (я сейчас нахожусь в JDK / bin) и набираю: ./java -version и получаю: ./java: No such file or directory, но java есть!ls -l в JDK показывает, что все java клиенты находятся внутри bin .

#!/bin/bash
#Author: Yucca Nel http://thejarbar.org
#Will restart system
#Modify these variables as needed...
tempWork=/tmp/work
locBin=/usr/local/bin
javaUsrLib=/usr/lib/jvm

sudo mkdir -p $javaUsrLib
mkdir -p $tempWork
cd $tempWork

#Update this line to reflect newer versions of JDK...
wget http://download.oracle.com/otn-pub/java/jdk/7u2-b13/jdk-7u2-linux-i586.tar.gz

#Extract the download
tar -zxvf $tempWork/*

#Move it to where it can be found...

sudo mv -f $tempWork/jdk1.7* $javaUsrLib/

sudo ln -f -s $javaUsrLib/jdk1.7*/bin/* /usr/bin/
sudo rm -rf $tempWork
#Update this line to reflect newer versions of JDK...
export JAVA_HOME="$javaUsrLib/jdk1.7.0_02"

if ! grep "JAVA_HOME=$javaUsrLib/jdk1.7.0_02" /etc/environment
then
    echo "JAVA_HOME=$javaUsrLib/jdk1.7.0_02"| sudo tee -a /etc/environment
fi

sudo /sbin/reboot

exit 0

Запуск ls -l /usr/lib/jvm/jdk1.7.0_02/bin/java дает мне: yucca@yucca-VirtualBox:~$ -rwxr-xr-x 1 yucca yucca 5654 2011-11-17 22:38 /usr/lib/jvm/jdk1.7.0_02/bin/java

такжеrun: file /usr/lib/jvm/jdk1.7.0_02/bin с выводом:

/usr/lib/jvm/jdk1.7.0_02/bin: directory

Ответы [ 2 ]

35 голосов
/ 31 января 2012

Вы работаете в 64-битной системе без 32-битной среды выполнения.

Предполагается, что проблема с Ubuntu / Debian:

apt-get install libc6-i386

Или вы должны установить 64-битную версию пакета в эту виртуальную машину (что, вероятно, является лучшим решением).

Сообщение об ошибке исходит от компоновщика / загрузчика во время выполнения. если вы сделаете readelf -l java, вы найдете строку вроде:

 [Requesting program interpreter: /lib/ld-linux.so.2]

Это то, что вы ожидаете от 32-битного приложения, и, возможно, у вас не установлена ​​32-битная среда - проверьте с помощью ls -l этого program interpreter.

и пример для 64-битной программы будет выглядеть (ваша система может отличаться):

 [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Если это не так, и у вас установлен 32-битный libc, вы можете попробовать ldd java, который выдаст список вроде:

linux-gate.so.1 =>  (0xf76ef000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf76b3000)
libjli.so => /home/bubba/java/jdk1.7.0_02/bin/./../jre/lib/i386/jli/libjli.so (0xf769f000)
libdl.so.2 => /lib32/libdl.so.2 (0xf7699000)
libc.so.6 => /lib32/libc.so.6 (0xf751f000)
/lib/ld-linux.so.2 (0xf76f0000)

если есть строки с надписью not found, то вы должны добавить pagkages, при условии, что, как вы можете видеть из этого ldd, все зависимости являются базовыми библиотеками, которые должны присутствовать практически во всех системах Linux.

1 голос
/ 31 октября 2017

Я получаю

bash: / usr / bin / java: нет такого файла или каталога

Проблема заключалась в том, что я установил i586 версию Java на x86_64 Debian.

Исправление: я удалил его и установил x64 версию Java. Теперь все работает нормально.

...