如何解决"无法打开共享对象文件 libudev.so.0"的错误?

尝试在Ubuntu 64上运行Game Dev Tycoon。它要求上述对象。
我运行了sudo apt-get install libudev1:i386,结果显示已经安装好了。
我有/lib/i386-linux-gnu/libudev.so.1,但是没有找到任何libudev.so.0

1这是在尝试在Mint Petra 16上安装新版本的Popcorntime时发生的。 - igorsantos07
15个回答

为了修复这个问题,我将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位系统:sudo ln -sf /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0 - Stefano
12请不要这样做。这只会引来麻烦。 - dobey
1这个搞砸了我的Plex Home Theatre,要恢复原样,请删除libudev.so.0的符号链接并重新安装libudev0:i386。 - Johan Bjäreholt
2在32位系统上,这是命令(如果有人来到这里):sudo ln -sf /lib/i386-linux-gnu/libudev.so.1 /lib/i386-linux-gnu/libudev.so.0 - amit_saxena
这个命令对我来说不起作用:在32位的Precise系统上,文件位于/lib/i386目录下,但是$(arch)的值是i686。而且我有libudev0但没有libudev1,所以我不得不反过来链接。 - That Brazilian Guy
6听dobey的,这个是个复杂的过程。Ryan Crichton在这里发布了正确的做法。 - berbt
这里可以找到旧版本:http://packages.ubuntu.com/precise/libudev0 - rubo77
谢谢,它在我的Ubuntu 14.04上正常工作了 :)(Popcorn Time问题) - Spl2nky
1这会破坏你的系统。对我来说,不仅是Unity无法运行,连无线局域网也坏了… :( - Adrians Netlis

对于Ubuntu 14.04及以上版本

我发现最简单的方法是只需下载.deb文件64位下载的直接链接32位下载),然后双击安装或使用dpkg进行安装:

dpkg -i libudev0_175-0ubuntu9_amd64.deb

对于之前的版本

在之前的Ubuntu版本中,这个软件包可以在官方软件仓库中找到。您可以使用以下命令进行安装:

sudo apt-get install libudev0:i386

18这是正确的答案。如果一个软件包丢失,你只需要安装该软件包...就是这么简单。创建链接、十六进制编辑名称、重新配置Google Chrome、滥用CPU以及吸食辣椒粉都不是真正的解决方案。 - berbt
2但是只有在该软件包可用的情况下才能起作用。 - Tamsyn Michael
1@TamsynMichael 包不一定要在存储库中可用,您可以从上面的链接下载它,然后手动在 Ubuntu 版本上安装它,这些版本在官方存储库中没有该软件包。 - Ryan Crichton
这应该是正确的答案!这是适当的修复,没有混乱的符号链接或其他任何东西。 - Rachid Boudjelida
这是我能找到的最简单的方法。将旧版本的依赖项添加到仓库真是一件麻烦的事情。 - denny
工作得很顺利,这就是正确的方式。没有链接,没有麻烦。谢谢! - Nikos Grigoriadis
这适用于STEAM - aggsol
由于 URL 链接经常会因发行版版本增加而出现 404 错误,所以这里是它的非特定链接:https://packages.ubuntu.com/search?keywords=libudev&searchon=names&suite=hirsute&section=all - kissu

我曾遇到一个不同的程序相同的问题,但是Sean所给出的答案对我没有任何帮助。在我的升级安装的64位13.04版本中,libudev0既没有64位形式也没有i386形式可用。而ia32-libs已经安装好了。所以没有解决的办法。
我所做的是略微修改了senshikaze的更技术性的解决方案。我手动将libudev.so.0链接到x86_64 lib目录下的libudev.so.1,具体如下:
cd /lib/x86_64-linux-gnu/
sudo ln -sf libudev.so.1 libudev.so.0

这个对我解决了。


这对我也有帮助 - 运行的是Ubuntu 15.04 64位版本。非常感谢。 - Tamsyn Michael
固定在Ubuntu 19.04上 - Alexander Haroldo da Rocha

对于64位Ubuntu,它在32位的libudev0软件包中。

您可以使用以下命令安装:

sudo apt-get install libudev0:i386

这个软件包在Ubuntu 14.04中已被移除。您需要从旧版本安装它。

3找不到任何软件包时,尝试查找libudev0:i386。有什么想法吗? - Jonathan
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
我不得不输入这个命令才能在64位的Debian系统上安装google-webdesigner。 - HoboBen
2请从这里安装旧版本:http://packages.ubuntu.com/precise/libudev0 - rubo77
软件包libudev0不可用,但被另一个软件包引用。 这可能意味着该软件包丢失、已过时或仅可从其他来源获取。 - Aaron Franke
@PhilStrong的解决方案对我百分之百有效。 - Raj

这个错误可能发生在尝试使用Node Webkit中的nw可执行文件时。就像这样:
./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. 进入包含node webkit的目录:
    • 在我的情况下:执行命令 cd ~/Dokumenty/node-webkit-*
  3. 使用以sudo为前缀的十六进制编辑器命令打开nw二进制文件:
    • 运行命令:sudo hexedit nw
  4. 搜索ASCII字符串libudev.so.0
    • 如果使用hexedit:按下Tab键。
    • 按下Ctrl+S键。
    • 输入:libudev.so.0
  5. libudev.so.0字符串中的0改为1,使其变为:libudev.so.1
    • 使用箭头键选择libudev.so.0字符串中的0
    • 在键盘上按下1
  6. 退出并保存更改:
    • 按下Ctrl+X键。
    • 按下Y键以保存更改。
你完成了。这也解决了Atraci二进制文件的问题,方法是按照相同的指令,只不过是在编辑Atraci文件时进行十六进制编辑。

2运行命令 cat nw | sed s/libudev.so.0/libudev.so.1/ > fixed_nw,然后执行 chmod a+x fixed_nw,你就可以运行它了,无需安装任何东西。 - Catalyst

这里唯一适用于Ubuntu 14.04的答案是被接受的答案,而且由于许多评论指出这可能会导致系统在未来出现问题(虽然我自己不清楚),所以我想出了一个折中方案。这个脚本将在终端中提示您输入root密码。它将创建符号链接并启动应用程序(在我的情况下是Popcorn Time)。当您退出应用程序时,它将使用现有的sudo会话来删除符号链接。
#!/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
1我最终选择了这个答案 - Flimm

我刚找到了一个方法让这个工作起来,虽然有点傻。
我在系统上安装了Google Chrome,而Chrome内嵌了这个共享对象。所以,我只需要在Chrome安装目录下创建一个符号链接到这个库文件就可以了。
ln -sf /opt/google/chrome/libudev.so.0 /lib/x86_64-linux-gnu/libudev.so.0

对我来说运行得很好。


这是我找到的最简单的解决方案。
sudo ln -s /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0

Phil Strong所指出
安装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

这是我在32位Ubuntu 15.04上解决相同问题时使用的方法。
cd i386-linux-gnu
sudo ln -sf libudev.so.1 libudev.so.0