是否可以在 64 位系统上安装 32 位库?

是否可以在 64 位系统上安装 32 位库?

我已经安装了 32 位共享库,但在尝试安装 pogoplug 时仍然出现此错误:

./pogoplugfs: error while loading shared libraries: libfuse.so.2: wrong ELF class: ELFCLASS64

我还需要做些什么才能让程序从 32 位库加载吗?

今年早些时候也曾有人提出过类似的问题,但没有得到任何答复。

答案1

对于某些库,可以在 64 位系统上同时安装 32 位和 64 位库。这可以通过ia32-libsUbuntu 10.04 及之前版本的软件包获得。根据文件列表ia32-libs,没有libfuse.so.2包含任何文件。这意味着您不能同时安装两种架构。

从 Ubuntu 11.10 Oneiric 开始,软件包可以允许同时安装不同的架构,这被称为“多架构”。不幸的是,如果我可以相信libfuse2Oneiric 上的文件列表,此包尚未转换。这可以从包依赖关系中确定:如果包依赖于multiarch-support(如libdrm2),它支持多架构支持。然而,这是不是保证该软件包可以同时安装到多种架构上。

要查询本地缓存中某个包的多架构功能,请libc6运行:

apt-cache show libc6 | grep ^Multi-Arch:

对于此命令,输出为Multi-Arch: same。这意味着可以一次安装软件包的 32 位和 64 位版本。如果没有输出,则表示软件包尚未准备好支持多架构。其他可能值foreign(不可共同安装,但可用于满足其他架构的依赖关系)和allowed(iirc,一次只允许安装一个包,但该包可用于满足其他包的依赖关系)

您应该能够使用以下命令在 64 位系统上安装 32 位软件包:

sudo apt-get install packagename:i386

为 64 位机器构建 32 位 libfuse

由于没有提供 32 位保险丝库ia32-libs,因此您别无选择,只能自行构建。

  1. 安装 fuse 的构建依赖项并获取源代码:

    sudo apt-get install ia32-libs libc6-i386
    sudo apt-get build-dep fuse
    apt-get source fuse
    
  2. 配置源树并构建 fuse(如果需要,调整目录名称):

    cd fuse-2.8.4
    CFLAGS=-m32 ./configure --host=i386-linux-gnu
    make -j 50
    
  3. 安装32位fuse库(相应调整版本):

    sudo ln -s libfuse.so.2.8.4 /usr/local/lib/libfuse.so.2
    sudo install -m644 lib/.libs/libfuse.so.2.8.4 /usr/local/lib/
    
  4. 更新链接器缓存:

    sudo ldconfig
    
  5. (可选)删除源文件:

    cd ..
    rm -r fuse-2.8.4
    

答案2

是的。安装 ia32。完成后,您现在可以在 64 位平台上安装任何基于 32 位的程序。

相关内容