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

Mat*_*Mat 8 64-bit

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

./pogoplugfs: error while loading shared libraries: libfuse.so.2: wrong ELF class: ELFCLASS64
Run Code Online (Sandbox Code Playgroud)

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

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

Lek*_*eyn 9

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

从 Ubuntu 11.10 Oneiric 开始,软件包可以允许同时安装不同的架构,称为“多架构”。不幸的是,如果我相信Oneiric 上的文件列表libfuse2,这个包还没有被转换。这可以从包依赖关系中确定:如果一个包依赖multiarch-support(如libdrm2),它支持多架构支持。但是,这并不能保证可以同时为多个体系结构安装该软件包。

要查询本地缓存以获取包的多架构功能libc6,请运行:

apt-cache show libc6 | grep ^Multi-Arch:
Run Code Online (Sandbox Code Playgroud)

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

您应该能够在 64 位系统上安装 32 位软件包:

sudo apt-get install packagename:i386
Run Code Online (Sandbox Code Playgroud)

为 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 配置源树并构建熔断器(如果需要,调整目录名称):

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

    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/
    
    Run Code Online (Sandbox Code Playgroud)
  4. 更新链接器缓存:

    sudo ldconfig
    
    Run Code Online (Sandbox Code Playgroud)
  5. (可选)删除源文件:

    cd ..
    rm -r fuse-2.8.4
    
    Run Code Online (Sandbox Code Playgroud)