我正在尝试运行一个使用 libudev.so
的 exe,但它给出了这个错误:
error while loading shared libraries: libudev.so.0: cannot open shared object file: No such file or directory
运行 uname -a
给出:
3.5.0-44-generic #67~precise1-Ubuntu SMP Wed Nov 13 16:16:57 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
我正在使用 Ubuntu 12.04
我检查了/lib
/lib32
/lib64
那里没有libudev
但在 Synaptic 管理器中,我可以看到安装了 libudev0
(见下图)
我可以在 /lib/x86_64-linux-gnu/libudev.so.0
中找到它。
有什么问题吗?
最佳答案
事实证明(如我所料)您试图在 64 位系统上运行 32 位可执行文件。 64 位 Linux 内核能够运行 32 位可执行文件(这就是为什么你不会得到“exec format error”),但它需要一组单独的(32 位)库: 的 64 位版本libudev.so.0
对 32 位程序没有用。 (有关共享库依赖性解析的一些详细信息,请参阅 ld.so manpage)。
基于 Debian 的现代发行版支持同时为多个体系结构安装库。 apt-get install libudev0:i386
应该会得到一个 32 位版本的库及其所有依赖项(如果这是您第一次使用 32 位应用程序,可能会有很多)。如果您从旧安装升级,您可能需要将 i386
添加到 dpkg
支持的体系结构中,如下所示:
dpkg --add-architecture i386
如果程序还需要一些其他库,可以使用一些建议:
- 使用ldd一次查看所有依赖项(以及缺少的内容)
- 安装 apt-file并运行
apt-file update
,因此您可以通过文件名查找包名称,即使该包当前未安装(如下所示:apt-file search/libudev.so .0
)
还有一种在 64 位系统上获取 32 位库的旧 Debian 方法:amd64 存储库中的 ia32-libs
包提供了一组库,概念上“您的应用程序可能需要的一切” ”。 不要使用这种方法,除非您运行的是 Debian squeeze 或更早的版本(或同时期的基于 debian 的发行版)。即使它有效,也不能保证该程序也不需要其他库。 Ia32-libs
在多体系结构支持尚未准备就绪时很有用,那是几年前的事了。
关于linux - 在 Ubuntu :libudev. 上运行 32 位 exe 所以:无法打开共享对象文件:没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21153326/