Java não roda com erro “Nenhum tal arquivo ou diretório”, apesar de existir e é x86_64

1

O arquivo existe, mas o bash reclama quando não é pedido para executá-lo.

$ ./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

Eu li este problema aconteceu quando uma versão de 32 bits foi executada em um sistema de 64 bits. Infelizmente não parece ser o meu caso

$ 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

'' '

    
por logic.town 09.03.2015 / 23:26

2 respostas

1

Este é realmente um erro típico relacionado à arquitetura incorreta. No entanto, também é indicativo que as bibliotecas necessárias para executar o executável não foram encontradas.

Você precisa adicionar suas bibliotecas x86-64 para o tempo de execução Java ao LD_LIBRARY_PATH ou adicionar o diretório que as contém ao diretório /etc/ld.so.conf.d/ . Para fazer isso, primeiro converta seu ./Libs/openjdk-1.8.0_60-eap em um caminho absoluto. Nas minhas sugestões abaixo, assumi /opt/java/Libs/openjdk-1.8.0_60-eap .

Sem acesso root (ou para testes)

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

Com acesso 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
    
por 09.03.2015 / 23:37
0

Você pode usar ldd no java para ver se há bibliotecas ausentes.

Você pode usar strace para ver se um arquivo está faltando ou se é dlopen() 'ing algum arquivo.

    
por 10.03.2015 / 06:44