Pregunta ENOENT o enotent? [cerrado]


uprego@udv1320ku12:~$ ls /usr/bin/ -thral | grep java
-rwxr-xr-x 1 root root 78 Aug 25 2010 javacc
-rwxr-xr-x 1 root root 2.5K Mar 13 2012 dh_nativejava
lrwxrwxrwx 1 root root 22 Sep 23 19:40 java -> /etc/alternatives/java
...

/usr/bin/java existe, al menos como una referencia a algo que puede existir y ser ejecutable.

uprego@udv1320ku12:~$ strace /usr/bin/java
execve("/usr/bin/java", ["/usr/bin/java"], [/* 45 vars */]) = 0
...

Parece que / usr / bin / java se resolvió correctamente en un documento ejecutable.

uprego@udv1320ku12:~$ ls /home/uprego/skype-4.0.0.8/ -thral
total 26M
-rw-r--r-- 1 uprego uprego 7.0K Jul 13 10:53 third-party_attributions.txt
drwxr-xr-x 2 uprego uprego 4.0K Jul 13 10:53 sounds
-rw-r--r-- 1 uprego uprego 161 Jul 13 10:53 skype.desktop
-rw-r--r-- 1 uprego uprego 453 Jul 13 10:53 skype.conf
-rwxr-xr-x 1 uprego uprego 26M Jul 13 10:53 skype
...

/home/uprego/skype-4.0.0.8/skype existe como un documento, permiso de administrador en.

uprego@udv1320ku12:~$ strace /home/uprego/skype-4.0.0.8/skype
execve("/home/uprego/skype-4.0.0.8/skype", ["/home/uprego/skype-4.0.0.8/skype"],
    [/* 45 vars */]) = -1 ENOENT (No such file or directory)
...

¿Realmente existe?

Gracias por tu atención.


0


origen


Y file skype (en ese directorio) dice qué? - ott--
ELF 32 bits LSB ..! - uprego


Respuestas:


Cuando execve() devuelve el error ENOENT, puede significar más de una cosa:

  • el programa no existe;
  • el programa en sí existe, pero requiere un "intérprete" que no existe.

Los ejecutables ELF pueden solicitar ser cargados por otro programa, de una manera muy similar a #!/bin/something en scripts de shell.

Por lo general, los ejecutables dinámicamente vinculados solicitan /lib/ld-linux.so.2 (u otra ruta similar), que se encarga de encontrar las bibliotecas compartidas necesarias y cargarlas en la memoria antes de que se inicie el programa.

En este caso, supongo que estás intentando ejecutar Skype de 32 bits en un sistema de 64 bits y no has instalado el de 32 bits glibc y otras bibliotecas necesarias (En Debian, debería ser libc6:i386; en Arch, lib32-glibc.)

Para ver la ruta exacta solicitada por el programa, use readelf -l:

$ readelf -l /bin/sh | grep interpreter
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

$ readelf -l /tmp/skype-4.1.0.20/skype | grep interpreter
      [Requesting program interpreter: /lib/ld-linux.so.2]

2



Instaló el glibc de 32 bits con un sudo aptitude install libc6-dev-i386 ahora pide el libasound2 de 32 bits, para el cual no veo ningún candidato precompilado. Un colega de la oficina sugiere el robo. Creo que estoy intentando eso y volviendo a las bibliotecas de 32 bits si eso no progresa. Gracias. - uprego
@uprego: prueba lib32asound2 o libasound2:i386, dependiendo de la versión del sistema operativo. O, de hecho, solo descarga Skype .deb paquete... - grawity