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


8

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

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

我还需要做些其他事情才能使程序从32位库中加载吗?

今年早些时候,有人问过类似的问题,但没有给出任何答案。

Answers:


9

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

从Ubuntu 11.10 Oneiric开始,软件包可能允许同时安装称为“ Multi-Arch”的不同体系结构。不幸的是,如果我相信Oneiric上的文件列表libfuse2,则该软件包尚未转换。这可以通过软件包依赖关系来确定:如果一个软件包依赖于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. 安装保险丝的构建依赖关系并获取源代码:

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

    cd fuse-2.8.4
    CFLAGS=-m32 ./configure --host=i386-linux-gnu
    make -j 50
    
  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/
    
  4. 更新链接器缓存:

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

    cd ..
    rm -r fuse-2.8.4
    

0

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


我安装了ia32(这就是我在谈论共享库)。这只会使错误出现在libfuse.so.2中
Mat

1
ia32-libs不包含所有32位库。
Lekensteyn 2011年
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.