Як вирішити помилку "Не вдається відкрити спільний об'єктний файл libudev.so.0"?


81

Спроба запустити Game Dev Tycoon на Ubuntu 64. Він запитує вищезазначений об'єкт.

Я побіг, sudo apt-get install libudev1:i386і він повернувся вже встановлений.

У мене немає, /lib/i386-linux-gnu/libudev.so.1але libudev.so.0ніде.


1
Це сталося при спробі встановити нову версію Popcorntime на Mint Petra 16
igorsantos07

Відповіді:


27

Для 64-розрядних Ubuntu він знаходиться в 32-бітному пакеті libudev0.

Ви можете встановити це за допомогою наступної команди:

sudo apt-get install libudev0:i386

Цей пакет було видалено з Ubuntu 14.04. Вам потрібно буде встановити його зі старої версії.


3
не знайдено жодного пакету при спробі шукати libudev0: i386 якісь ідеї?
Джонатан

26
Я закінчив робити sudo apt-get install libudev1: i386, а потім sudo ln -sf /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0
Phil Strong

Мені довелося ввести цю команду, щоб змусити google-webdesigner встановити 64-бітний Debian
HoboBen

2
Будь ласка , встановіть стару версію звідси: packages.ubuntu.com/precise/libudev0
rubo77

Пакет libudev0 недоступний, але посилається на інший пакет. Це може означати, що пакет відсутній, застарілий або доступний лише з іншого джерела
Аарон Франке

199

Щоб виправити, я пов’язав libudev.so.1із libudev.so.0:

sudo ln -sf /lib/$(arch)-linux-gnu/libudev.so.1 /lib/$(arch)-linux-gnu/libudev.so.0

25
для 64 біт: Судо пров -sf /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0
Pisu

10
Будь ласка, не робіть цього. Це лише прохання про проблеми.
добі

1
Це зіпсувало для мене домашній кінотеатр Plex, щоб відновити видалення libudev.so.0 symlink та перевстановити libudev0: i386
Johan Bjäreholt

2
На 32 sudo ln -sf /lib/i386-linux-gnu/libudev.so.1 /lib/i386-linux-gnu/libudev.so.0
біті

6
Слухайте добі, це безладна процедура. Райан Кріктон розмістив правильний спосіб ТУТ .
берб

55

Для ubuntu 14.04 і вище

Найпростіший метод, який я знайшов, - це просто завантажити .deb ( пряме посилання на 64-розрядне завантаження та 32-розрядне завантаження ) та двічі клацнути його, щоб встановити його або використовувати dpkg для його встановлення:

dpkg -i libudev0_175-0ubuntu9_amd64.deb

Для попередніх версій

У попередній версії ubuntu цей пакет був доступний в офіційних сховищах. Ви можете встановити наступне:

sudo apt-get install libudev0:i386

17
ЦЕ ПРАВА ВІДПОВІДЬ . Якщо пакет відсутній, ви встановлюєте пакет ... це так просто. Створення посилань, шістнадцяткове редагування імен, перенастроювання Google Chrome, забивання процесора та фыркання порошку чилі - не справжні рішення.
berbt

2
Але він працює лише за наявності цього пакету.
Тамсін Майкл

1
@TamsynMichael пакет не повинен бути доступний у сховищах, ви можете завантажити його за посиланням, наведеним вище, а потім встановити його вручну на версії ubuntu, які не мають пакета в офіційних сховищах.
Райан Кріктон

Це має бути правильна відповідь! це правильне виправлення, без брудних символічних посилань чи будь-чого іншого
lord-ralf-adolf

Це найпростіший метод, який я можу знайти. Додавання старшої залежності до сховища - це біль
заперечення

32

У мене була така ж проблема для іншої програми, але прийнята відповідь Шона мені зовсім не допомогла. У моїй оновленій 64-розрядної версії 13.04 libudev0 недоступна ні в 64-бітній, ні в i386. І ia32-libs вже встановлено. Так що без кісток.

Що мені довелося зробити, це злегка модифікована версія більш технічного рішення сенсікадзе. Я вручну символізував libudev.so.0 на libudev.so.1 в каталозі lib x86_64, таким чином:

cd /lib/x86_64-linux-gnu/
sudo ln -sf libudev.so.1 libudev.so.0

Це зафіксувало це для мене.


Це вирішило і для мене - запуск 64-бітного Ubuntu 15.04. Дякую купу.
Тамсін Майкл

Виправлено на Ubuntu 19.04
Олександр Гарольдо да Роша

5

Ця помилка може статися при спробі використання nw виконуваного файлу з Node Webkit . Подобається це:

./nw: error while loading shared libraries: libudev.so.0: cannot open shared object file: No such file or directory

Як вирішити:

  1. Отримайте шестигранний редактор, який дозволяє змінювати ASCII рядок двійкових, наприклад. hexedit :

    • У терміналі ( Ctrl+ Alt+ T), запустити: sudo apt-get install hexedit.
    • Дотримуйтесь інструкцій, представлених у терміналі (введіть пароль, якщо потрібно, підтвердіть встановлення)
  2. Перейти до каталогу з вузлом webkit :
    • У моєму випадку: cd ~/Dokumenty/node-webkit-*.
  3. Відкрийте nw двійковий файл за допомогою команди hex editor, перед якою sudo:
    • Run: sudo hexedit nw.
  4. Шукати libudev.so.0як рядок ASCII:
    • Якщо ви використовуєте hexedit : Натисніть Tab.
    • Натисніть Ctrl+ S.
    • Тип: libudev.so.0.
  5. Зміна 0в libudev.so.0рядку , щоб 1, таким чином це стає: libudev.so.1:
    • З допомогою клавіш зі стрілками виберіть 0у libudev.so.0рядку.
    • Натисніть 1на клавіатурі.
  6. Вийдіть і збережіть зміни.
    • Натисніть Ctrl+ X.
    • Натисніть, Yщоб зберегти зміни.

Ви закінчили. Це також виправляє проблему з бінарними Atraci при дотриманні тих же інструкцій, за винятком шестнадцяткового редагування файлу Atraci замість nw.


2
cat nw | sed s/libudev.so.0/libudev.so.1/ > fixed_nw, chmod a+x fixed_nwі тоді ви можете запустити його, не потрібно нічого встановлювати
Catalyst

4

Єдина відповідь, яка працює на Ubuntu 14.04, - це прийнята відповідь, і оскільки багато коментарів зазначають, що це може спричинити проблеми із системою в дорозі (хоча я сам про це не знаю), я прийшов до компромісу. Цей скрипт підкаже (у терміналі) для вашого кореневого пароля. Це створить символічне посилання та запустить додаток (у моєму випадку - попкорн). Коли ви закриєте програму, вона використає існуючий сеанс судо для видалення символічного посилання:

#!/bin/sh
sudo ln -sf /lib/i386-linux-gnu/libudev.so.1 /lib/i386-linux-gnu/libudev.so.0
./Popcorn-Time #replace this line with the path to the executable you want to launch
sudo rm /lib/i386-linux-gnu/libudev.so.0

Мені подобається ця ідея, хоча мені цікаво, чи є спосіб замість цього використовувати змінну середовища LD_LIBRARY.
Flimm

@Flimm, дайте мені знати, як ви дістаєтесь.
TenLeftFingers


4

Я щойно знайшов спосіб зробити цю роботу, хоча досить дурний.

У мене в моїй системі встановлений Google Chrome, і в Chrome вбудований цей спільний об’єкт. Отже, мені просто довелося зробити символічне посилання на бібліотеку в каталогу встановлення Chrome.

ln -sf /opt/google/chrome/libudev.so.0 /lib/x86_64-linux-gnu/libudev.so.0

Для мене це працює чудово.


4

Це було найпростіше рішення, яке я знайшов

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

2

як зазначив Філ Стронг

встановити libudev.so.1

sudo apt-get install libudev1:i386

потім зв’яжіть це як libudev.so.0

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

1

Я робив це 14.04, але має бути схожим. просто видаліть пакет і перевстановіть. правильні бібліотеки встановлені належним чином.

apt-get purge google-chrome-stable
apt-get install google-chrome-stable

Я впевнений, що інші відповіді спрацьовують, але у мене є основна яловичина в зміні об'єктів файлової системи, якими керуються пакети управління конфігурацією.


1

Це те, що я використовував для вирішення тієї ж проблеми в 32-бітному Ubuntu 15.04.

cd i386-linux-gnu
sudo ln -sf libudev.so.1 libudev.so.0

0

ОНОВЛЕННЯ Я створив сценарій bash, щоб обернути програму, яку потрібно виконати. Ви можете додати його у свою локальну папку біна та просто запустити програму без копіювання та вставки та запуску скриптів оболонки.

#!/bin/bash

ProgramToExecute="/PATH/TO/PROGRAM" #Example: $HOME/dart/./DartEditor

system=$(uname -m) #Returns x86_64 on 64 bit systems
libdir="/lib/$system-linux-gnu"
libudev1="$libdir/libudev.so.1"

if [ ! -f $libudev1 ]
then
        #check if an i386 folder exist because ' uname -m' returns i686 instead of i386.
        libdir="/lib/i386-linux-gnu"
        libudev1="$libdir/libudev.so.1"
        #if none of the lookups return a file, this script exits,
        BreakUpNotice="This $libudev1 isn't working out. It's not you
        it's me. Or maybe you forgot to install libudev1 library.
        sudo apt-get install libudev1 "

        [ ! -f $libudev1 ] && echo $BreakUpNotice  && exit 0
fi

libudev0="$libdir/libudev.so.0"

echo "$libudev1 found."
sudo ln -sf $libudev1 $libudev0
sudo -k #revoke sudo 
$($ProgramToExecute)

NoticeAfterExec="Enter sudo to del libudev link (recommended) or press CTRL+C to cancel."
RmSuccess="And $libudev0 link is gone."
RmFailed="Whaat? $libudev0 still exists."

echo $NoticeAfterExec
sudo rm $libudev0
sudo -k
[ ! -f "$libudev0" ]  && echo $RmSuccess || echo $RmFailed
exit 

СТАРИЙ ВІДПОВІДЬ У Ubuntu 14.04 я отримував повідомлення про помилку від редактора Dart при спробі використання Live Preview (Chromium). Помилку було вирішено шляхом встановлення libudev1 та створення символічного зв’язку .

    sudo apt-get install libudev1

Я також використав сценарій, згаданий вище TenLeftFingers, щоб виконати DartEditor.

    #!/bin/sh
    sudo ln -sf /lib/i386-linux-gnu/libudev.so.1 /lib/i386-linux-gnu/libudev.so.0
    ./DartEditor
    sudo rm /lib/i386-linux-gnu/libudev.so.0

Якщо редактор Dart не виконується, переконайтеся, що встановлено JAVA, і це не проблема з дозволом.

    sudo apt-get install python-software-properties
    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java7-installer

і зробіть IDE виконуваним:

    sudo chmod a+x ./DartEditor

Це працювало для мене.


0

Я отримав таку ж помилку в своїй 32-бітній системі після оновлення від Xubuntu Precise до Trusty. Це зафіксувало це для мене:

sudo dpkg-reconfigure google-chrome-stable

Я знайшов це тут . Не маючи абсолютно жодних параметрів, я не зовсім впевнений, як це виправлено, але це було. Що мені найбільше сподобалось, це те, що це не вимагало робити нічого, що потенційно могло б створити проблеми у мене в майбутньому, і не вимагало від мене пошуку будь-яких пакунків.


-1

Якщо хтось натрапить на цю сторінку під час копання в Інтернеті для виправлень на libudev.so.0 та Emotiv Epoc SDK Dev Edition на Ubuntu, я сподіваюся, що наступне допоможе:

// мій конфігурація 64-бітний Ubuntu 13.04

Для 64-бітної системи:

sudo ln -sf /lib/x86_64-linux-gnu/libudev.so.1. /lib/x86_64-linux-gnu/libudev.so.1

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

що дозволяє запобігти "помилку під час завантаження спільних бібліотек: libudev.so.0: неправильний клас ELF: ELFCLASS32"

sudo ln -sf /lib/x86_64-linux-gnu/libudev.so.1 /usr/lib/libudev.so.0

Для 32-бітної системи:

sudo ln -sf /lib/i386-linux-gnu/libudev.so.1. /lib/i386-linux-gnu/libudev.so.1

sudo ln -sf /lib/i386-linux-gnu/libudev.so.1 /lib/i386-linux-gnu/libudev.so.0

що дозволяє запобігти "помилку під час завантаження спільних бібліотек: libudev.so.0: неправильний клас ELF: ELFCLASS64" (зауважте, це припущення, я перебуваю у 64-бітовій системі)

sudo ln -sf /lib/i386-linux-gnu/libudev.so.1 /usr/lib/libudev.so.0

EmotivControlPanel, EmoKey, EmoComposer, приклади Java та мало налаштовані приклади Qt повинні бути спроможні виконуватись після виконання вищесказаного (я вже спробував усі кроки вище + інші, знайдені в Інтернеті (переповнення стека, ..), але жоден не працював для мене, тож ось що я закінчила робити після деяких "спроб і помилок"

І останнє, але не менш важливе значення: Якщо хтось тут знає, як запускати програми, складені проти 32-бітових ліб на 64-бітовій системі, ПЕРЕКЛЮЧАЙ ВИКОРИСТОВУВАТИ ВИКОРИСТАНУВАННЯ БІБЛІОТЕКИ 3-й ПАРТІЇ 32-БІТИ?

точніше, для тих, хто знає, про що я говорю, як я повинен запускати приклади Qt "EmoCube" та "BlueAvatar" на моїй 64-бітовій системі?

-> для того, що я намагався до цього часу, найбільше, що я міг отримати, це: "помилка під час завантаження спільних бібліотек: libedk.so.1: неправильний клас ELF: ELFCLASS64"

Я думаю, що посилання на цю лібу в каталозі i386 не зробить її (хоча я ще не пробував її), тому якщо хтось має відповідь ... Я з нетерпінням чекаю її.

Привіт всі +


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.