ENOENT чи енотент? [зачинено]


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 існує, принаймні, як посилання на щось, що може існувати і бути виконаним.

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

Здається, / usr / bin / java вирішено правильно виконуваному документу.

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 існує як документ, дозвіл на виконання.

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

Чи дійсно воно існує?

Дякую за увагу.


1
І file skype(у тому довіднику) говорить що?
ott--

ELF 32-розрядний LSB ..!
упрего

Відповіді:


2

Коли execve()повертається помилка ENOENT, це може означати більше ніж одне:

  • програма не існує;
  • сама програма існує, але вона вимагає "інтерпретатора", якого не існує.

Виконані файли ELF можуть вимагати завантаження іншою програмою, таким чином, дуже схожим на #!/bin/somethingсценарії оболонки.

Зазвичай, динамічно пов'язані виконувані файли запитують /lib/ld-linux.so.2(або інший подібний шлях), який піклується про пошук необхідних спільних бібліотек та завантаження їх у пам'ять до запуску самої програми.

У цьому випадку я здогадуюсь, що ви намагаєтеся запустити 32-розрядний Skype в 64-бітній системі, і ви не встановили 32-бітний glibc та інші необхідні бібліотеки. (На Debian це має бути libc6:i386; на Arch,. lib32-glibc)

Щоб побачити точний шлях, який вимагає програма, використовуйте 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]

Встановив 32-розрядний glibc з sudo aptitude install libc6-dev-i386тепер запитом для 32-укушеного libasound2, для якого я не бачу жодного попередньо складеного кандидата. Офісний колега пропонує хронізувати. Я думаю, я намагаюся це зробити і повертаюся до 32-бітових бібліотек, якщо це не прогресує. Дякую.
упрего

@uprego: Спробуйте lib32asound2або libasound2:i386, залежно від версії ОС. Або, власне, просто скачайте .debпакет Skype …
grawity
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.