2014-01-16 15 views
12

Ich versuche, eine exe ausführen, die libudev.so verwendet, aber es gibt diesen Fehler:32-Bit-exe läuft auf Ubuntu: libudev.so: öffnen kann nicht Shared Object-Datei: Keine solche Datei oder das Verzeichnis

Fehler beim Laden Shared Libraries: libudev.so.0: kann nicht mit anderen geteilt Objektdatei öffnen: keine solche Datei oder das Verzeichnis

Lauf uname -a gibt:

3.5.0-44-generiC# 67 ~ preci se1-Ubuntu SMP Mi 13. November 16.16.57 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

ich verwende Ubuntu 12,04

ich eingecheckt haben /lib/lib32/lib64 gibt es keine libudev dort aber in Synaptische Manager kann ich sehen, libudev0 installiert (siehe Bild unten)

libudev on Synaptic Manager und ich es in /lib/x86_64-linux-gnu/libudev.so.0 finden konnte.

Was könnte falsch sein?

+0

Ist Ihr 'exe' 32-Bit- oder 64-Bit? Probiere 'Datei my.exe' aus. Wenn es sich um eine ausführbare 32-Bit-Datei handelt, wird erwartet, dass keine 64-Bit-Bibliothek dafür verwendet wird (dann müssen Sie ein "Multiarch" -System einrichten und "libudev0: i386" mit allen seinen Abhängigkeiten installieren) –

+0

file my.exe gibt: ELF 32-bit LSB ausführbare Datei, Intel 80386, Version 1 (SYSV), dynamisch verlinkt (benutzt shared libs), für GNU/Linux 2.6.24, BuildID [sha1] = 0xe561272b6fba244041101a89deb43b9cdf17fe3a, nicht entfernt, Es ist eine 32 bit exe, Ich werde installieren, was Sie gesagt haben und versuchen. – Raulp

+1

Ja, das ist es. Wenn Ihr System noch nicht "Multiarch" ist (Sie wissen es, wenn das Paket 'libudev0: i386' nicht gefunden wird), müssen Sie es möglicherweise konfigurieren. Es ist mit 'dpkg --add-architecture i386' auf debian (dann' apt-get update') gemacht, aber es kann in Ubuntu anders sein. –

Antwort

7

Es stellt sich heraus (wie ich vermutete), dass Sie versucht haben, eine 32-Bit-ausführbare Datei auf einem 64-Bit-System auszuführen. Der 64-Bit-Linux-Kernel kann ausführbare 32-Bit-Dateien ausführen (deshalb erhalten Sie keinen "exec-Formatfehler"), aber er benötigt einen separaten Satz von (32-Bit-) Bibliotheken: Die 64-Bit-Version von libudev.so.0 ist nutzlos für ein 32-Bit-Programm. (Weitere Details zur Auflösung der gemeinsamen Bibliotheksabhängigkeit finden Sie unter ld.so manpage.)

Moderne Debian-basierte Distributionen unterstützen die gleichzeitige Installation von Bibliotheken für mehrere Architekturen. apt-get install libudev0:i386 sollte eine 32-Bit-Version der Bibliothek und all ihrer Abhängigkeiten erhalten (möglicherweise gibt es viele davon, wenn Sie zum ersten Mal eine 32-Bit-Anwendung verwenden). Wenn Sie von einer alten Installation aktualisiert, müssen Sie i386 auf Architekturen von dpkg, wie diese unterstützt hinzuzufügen:

dpkg --add-architecture i386 

Einige Ratschläge verwenden, wenn das Programm einige andere Bibliotheken benötigt auch:

  • Verwenden Sie ldd, um alle Abhängigkeiten gleichzeitig zu sehen (und was fehlt)
  • Installieren Sie apt-file und führen Sie apt-file update aus, damit Sie einen Paketnamen anhand eines Dateinamens nachschlagen können, auch wenn das Paket derzeit nicht installiert ist (wie hier) : apt-file search /libudev.so.0) war

Es gibt auch eine alte Debian-Art 32-Bit-Bibliotheken auf einem 64-Bit-System zu bekommen: ia32-libs Paket eine Reihe von Bibliotheken in amd64-Repositorys bereitgestellt wird, konzeptionell "könnte alles, was Ihre Anwendung benötigen". Verwenden Sie diesen Ansatz nicht, es sei denn, Sie Debian Squeeze oder früher (oder eine Debian-basierte Distribution des gleichen Alters). Selbst wenn es funktionierte, gab es keine Garantie, dass das Programm auch keine andere Bibliothek benötigt. Ia32-libs war nützlich, wenn Multiarch-Unterstützung noch nicht fertig war, und das war vor einigen Jahren.

4

Versuchen symbolische Verknüpfung zu erstellen:

sudo ln -s /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0 
+0

Nur für den Fall, dass jemand es braucht, in meinem Fall (eine andere RPM ...), für Rosa Linux war es Sudo ln -sf /lib/libudev.so.1 /lib/libudev.so.0 – CodeGust