Is it possible to have 32 bit libraries installed on a 64 bit system?

Solution 1:

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