4

There's a series of libs available in the Ubuntu repositories like lib32stdc++6 and lib32ncurses5. You can either install these on a 64 bit system, or go for installing libstdc++6:i386 and libncurses5:i386. I'm interested to learn what the difference is between the two types of packages.

What is the actual difference? Why are they both available? Being under the impression that libx:i386 is the new way of doing things, is this method always preferred over installing the lib32x variant? Having a couple of lib32x and a couple of libx:i386 libraries already installed also makes me wonder if it would be a good idea to switch to only one type of package by replacing them with there counterparts.

1
  • Good question. Looks like duplicate packages in the repositories. The only reason I can find for having this is efficient support for both multi-arch enabled systems and requirements for some single-arch enabled systems. However, I think all Ubuntu versions are multi-arch now. By the way, for reference three package links: libstdc++6, lib64stdc++6, lib32stdc++6
    – gertvdijk
    Jul 14, 2013 at 13:53

1 Answer 1

2

The practical difference between these packages is where the libraries are located. With libfoo:i386, libraries end up in multiarch paths such as /usr/lib/i386-linux-gnu whereas with lib32foo:amd64 libraries end up in the "old" paths such as /usr/lib32. In a distant future we would get rid of any lib32foo packages, but we are not there yet. At least lib32stdc++6 is needed for building gcc-X.Y at the moment, because it builds gcc-X.Y-multilib which is capable of supporting switches such as -m32 to select the target architecture (i.e. the architecture of the resulting binary). Without the lib32foo packages, the build-dependencies of gcc-X.Y would cross architecture boundaries and this is not yet supported. There are a few more issues that require keeping the lib32foo packages for a while.

3
  • If gcc-X.Y-multilib is an exception requiring a lib32foo package, what about 'general' 32bit applications? Do they care if a library is located in either /usr/lib/i386-linux-gnu or /usr/lib32?
    – Forage
    Jul 21, 2013 at 16:41
  • Both paths are tried for libraries by binaries. To verify that look at /etc/ld.so.conf (and the corresponding directory). Multiarch paths take precedence over "old" paths, since the files are considered lexicographically. Jul 21, 2013 at 16:43
  • "keeping the lib32foo packages for a while" - still the case 4 years later? :)
    – Ivan
    Jul 5, 2017 at 11:55

You must log in to answer this question.

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