linux - 在 Ubuntu :libudev. 上运行 32 位 exe 所以:无法打开共享对象文件:没有这样的文件或目录

标签 linux shared-libraries ubuntu-12.04 32bit-64bit i386

我正在尝试运行一个使用 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(见下图)

libudev on Synaptic Manager 我可以在 /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/

相关文章:

ubuntu - 立交桥 API 调度程序失败,地址已在使用 98

c++ - 如何测量当前在 Linux 上使用的内存带宽?

c - Ubuntu 上的多播

linux - 在 rhel 中的 grep 结果中的两个单词之间插入一个单词

c++ - 在编译和运行时之间发生变化时如何解析共享库位置?

c++ - 警告 : 'visibility' attribute ignored - symbol visibility - C++/gcc

linux - 带有两个共享库的 dlopen,导出符号

sql - 将sql ddl文件上传到postgresql数据库

android - 与内存支持文件相反?

linux - Unix:ls -t 的时间分辨率是多少?