0
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 exists, at least as a reference to something that may exist and be executable.

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

Seems /usr/bin/java resolved correctly to an executable doc.

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 exists as a doc, exec permission on.

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)
...

Does it really exist?

Thanks for your attention.

2
  • 1
    And file skype ( in that directory) says what?
    – ott--
    Nov 17, 2012 at 20:11
  • ELF 32-bit LSB..!
    – 174140
    Nov 17, 2012 at 20:46

1 Answer 1

4

When execve() returns the error ENOENT, it can mean more than one thing:

  • the program doesn't exist;
  • the program itself exists, but it requires an "interpreter" that doesn't exist.

ELF executables can request to be loaded by another program, in a way very similar to #!/bin/something in shell scripts.

Usually, dynamically-linked executables request /lib/ld-linux.so.2 (or another similar path), which takes care of finding the necessary shared libraries and loading them into memory before the program itself is started.

In this case, I am guessing that you're trying to run a 32-bit Skype on a 64-bit system, and you haven't installed the 32-bit glibc and other needed libraries. (On Debian, it should be libc6:i386; on Arch, lib32-glibc.)

To see the exact path requested by the program, 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
  • Installed the 32 bitted glibc with a sudo aptitude install libc6-dev-i386 now asks for the 32 bitted libasound2, for which I see no precompiled candidate. Office colleague suggests chrooting. I think I'm trying that and coming back to 32 bit libraries if that does not progress. Thank you.
    – 174140
    Nov 17, 2012 at 21:10
  • @uprego: Try lib32asound2 or libasound2:i386, depending on OS version. Or, actually, just download Skype's .deb package...
    – user1686
    Nov 17, 2012 at 22:53

Not the answer you're looking for? Browse other questions tagged or ask your own question.