Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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.

share|improve this question
add comment

2 Answers 2

up vote 6 down vote accepted

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
    
share|improve this answer
add comment

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

share|improve this answer
    
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 '11 at 6:53
1  
ia32-libs does not contain all 32-bit libraries. –  Lekensteyn Sep 11 '11 at 12:35
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.