8

I have the 32 bit shared libraries installed, yet I am still getting this error while trying to install pogoplug:

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

Is there something else I need to do to get the program to load from the 32 bit libraries?

A similar question was asked earlier this year, but was not given any answer.

0

2 Answers 2

9

For some libraries, it's possible to have both the 32-bit and 64-bit libraries installed on a 64-bit system. This is available through the ia32-libs package on Ubuntu 10.04 and before. According to the filelist of ia32-libs, there is no libfuse.so.2 file included. That means that you cannot have both architectures installed at a time.

Since Ubuntu 11.10 Oneiric, it's possible for packages to allow simultaneous installation for different architectures which is called "Multi-Arch". Unfortunately, if I may believe the filelist of libfuse2 on Oneiric, this package has not been transitioned yet. That can be determined from the package dependencies: if a package depends on multiarch-support (like libdrm2), it has support for multi-arch support. However, this is not a guarantee that the package can be installed for multiple architectures simultaneously.

To query your local cache for the multi-arch capabilities of a package, say libc6, run:

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

For this command, the output is Multi-Arch: same. That means that both the 32-bit and 64-bit versions of a package can be installed at a time. If there is no output, the package is not ready for multi-arch support. Other possible values are foreign (not co-installable, but it can be used to satisfy the dependencies of other architectures) and allowed (iirc, only one package is allowed to be installed at a time, but the package can be used to satisfy dependencies of other packages)

You should be able to install 32-bit packages on a 64-bit system with:

sudo apt-get install packagename:i386

Building 32-bit libfuse for 64-bit machines

Since the 32-bit fuse library is not supplied with ia32-libs, you've no other choice than building it yourself.

  1. Install the build dependencies for fuse and get the source code:

    sudo apt-get install ia32-libs libc6-i386
    sudo apt-get build-dep fuse
    apt-get source fuse
    
  2. Configure the source tree and build fuse (adjust the directory name if needed):

    cd fuse-2.8.4
    CFLAGS=-m32 ./configure --host=i386-linux-gnu
    make -j 50
    
  3. Install the 32-bit fuse library (adjust the version accordingly):

    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. Update the linker cache:

    sudo ldconfig
    
  5. (optional) Remove the source files:

    cd ..
    rm -r fuse-2.8.4
    
0
0

Yes there is. Install ia32. Once that is done, you can now install any 32bit based programs on a 64bit platform.

2
  • I had ia32 installed (thats what I was talking about with the shared libraries). This only brought the error up with libfuse.so.2
    – Mat
    Sep 10, 2011 at 6:53
  • 1
    ia32-libs does not contain all 32-bit libraries.
    – Lekensteyn
    Sep 11, 2011 at 12:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .