如何解决“无法打开共享库文件libudev.so.0”的错误?


Answers:


27

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

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

sudo apt-get install libudev0:i386

该软件包已在14.04中从Ubuntu中删除。您将需要从旧版本安装它。


3
尝试寻找libudev0:i386时找不到任何包?
乔纳森(Jonathan)2014年

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安装在Debian 64位上
HoboBen 2015年

2
请从此处安装旧版本:packages.ubuntu.com/precise/libudev0
rubo77

软件包libudev0不可用,但由另一个软件包引用。这可能意味着该包装丢失,已被废弃或只能从其他来源获得
Aaron

199

要修复,我链接libudev.so.1libudev.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
Pisu

10
请不要这样做。它只是在问问题。
dobey 2013年

1
这对我来说弄糟了Plex家庭影院,恢复删除libudev.so.0符号链接并重新安装libudev0:i386
JohanBjäreholt2014年

2
在32位上,这是命令(以防有人到达此处):sudo ln -sf /lib/i386-linux-gnu/libudev.so.1 /lib/i386-linux-gnu/libudev.so.0
amit_saxena 2014年

6
听dobey,这是一个凌乱的过程。Ryan Crichton在此处发布了正确的方法。
berbt 2015年

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,重击CPU和吸食辣椒粉不是真正的解决方案。
berbt

2
但是,只有在该软件包可用的情况下,它才有效。
Tamsyn Michael

1
@TamsynMichael该软件包不必在存储库中可用,您可以从上面的链接下载该软件包,然后手动将其安装在其官方存储库中没有该软件包的ubuntu版本上。
瑞安·克里顿

这应该是正确的答案!这是正确的解决方法,没有任何混乱的符号链接或任何东西
lord-ralf-adolf

这是我能找到的最简单的方法。向存储库添加较旧的依赖关系很痛苦
denny 2015年

32

对于不同的程序,我遇到了同样的问题,但是肖恩接受的答案完全没有帮助。在我升级的64位13.04安装中,libudev0不能以64位形式或i386形式使用。并且已经安装了ia32-libs。所以没有骰子。

我要做的是对senshikaze的技术稍作修改的版本。我在x86_64 lib目录中手动将libudev.so.0链接到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

5

尝试使用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. 使用以下十六进制编辑器命令打开nw二进制文件sudo
    • 运行:sudo hexedit nw
  4. 搜索为libudev.so.0ASCII字符串:
    • 如果使用hexedit:按Tab
    • Ctrl+ S
    • 类型:libudev.so.0
  5. 变化0libudev.so.0的字符串1,因此它成为:libudev.so.1
    • 使用箭头键来选择0libudev.so.0字符串。
    • 1在键盘上按。
  6. 退出并保存更改。
    • Ctrl+ X
    • Y保存更改。

你完成了。当遵循相同的指令(十六进制编辑Atraci文件而不是nw)时,这也解决了Atraci二进制文件的问题。


2
cat nw | sed s/libudev.so.0/libudev.so.1/ > fixed_nwchmod a+x fixed_nw然后就可以运行它,而无需安装任何软件
Catalyst

4

在Ubuntu 14.04上唯一适用的答案是已接受的答案,并且由于许多评论指出这可能会导致系统将来出现问题(尽管我自己对此并不了解),所以我想出了一个折衷方案。该脚本将提示(在终端中)您的root密码。它将创建符号链接并启动应用程序(在我的情况下为爆米花时间)。退出应用程序时,它将使用现有的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 2015年

1
我最终得到了这个答案
Flimm

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

正如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

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文件夹中,而无需复制和粘贴或运行Shell脚本即可启动该程序。

#!/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中,当尝试使用Live Preview(Chromium)时,我从Dart编辑器中收到错误消息。通过安装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

从Xubuntu Precise升级到Trusty后,我在32位系统上遇到了相同的错误。这为我解决了:

sudo dpkg-reconfigure google-chrome-stable

我在这里找到的。没有绝对的参数,我不太确定如何解决这个问题,但是确实做到了。我最喜欢的是,它不需要做任何将来可能对我造成问题的事情,也不需要我寻找任何软件包。


-1

如果有人在浏览网络以获取关于Ubuntu上的libudev.so.0和Emotiv Epoc SDK Dev Edition的修复程序时偶然发现此页面,希望以下内容对您有所帮助:

//我的配置是64位Ubuntu 13.04

对于64位系统:

须藤ln -sf /lib/x86_64-linux-gnu/libudev.so.1。/lib/x86_64-linux-gnu/libudev.so.1

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

什么可以防止“在加载共享库时出错:libudev.so.0:错误的ELF类:ELFCLASS32”

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

对于32位系统:

须藤ln -sf /lib/i386-linux-gnu/libudev.so.1。/lib/i386-linux-gnu/libudev.so.1

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

是什么可以防止“加载共享库时出错:libudev.so.0:错误的ELF类:ELFCLASS64”(请注意,我是在64位系统上)

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

完成上述操作后,应该可以运行EmotivControlPanel,EmoKey,EmoComposer,Java示例和少量自定义的Qt示例(我已经尝试了以上所有步骤,以及在网络上找到的其他步骤(堆栈溢出,..),但没有任何工作对我来说,这就是我经过一些“尝试和错误”后最终要做的事情

最后但并非最不重要的一点,如果这里有人知道如何在64位系统上运行针对32位库编译的程序,同时指定使用提供的3RD第三方32位库?

更确切地说,对于那些知道我在说什么的人,我应该如何在我的64位系统上运行“ EmoCube”和“ BlueAvatar” Qt示例?

->到目前为止,我所能尝试的最多是:“加载共享库时出错:libedk.so.1:错误的ELF类:ELFCLASS64”

我想到i386目录中该lib的符号链接不会成功(尽管我还没有尝试过),所以如果有人有答案的话……我很期待阅读它。

欢呼全部+


-4

在终端中运行以下命令:

cd /lib/x86_64-linux-gnu/
sudo cp libudev.so.0.13.0 libudev.so.1

这对我有帮助


cd / lib / x86_64-linux-gnu / sudo cp libudev.so.0.13.0 libudev.so.1
user214274 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.