| ▲ | duped an hour ago | ||||||||||||||||
> all shared libraries depend on the specific glibc version to load them Not really, though. glibc uses symbol versions that are forward but not backward compatible. If you got an error that said "this program was built for a newer version of <distro>" would you say the same thing? Note this is the same (if not worse) on MacOS, and on windows you used to distribute the CRT with your application just to deal with the same problem. | |||||||||||||||||
| ▲ | okanat an hour ago | parent [-] | ||||||||||||||||
See https://news.ycombinator.com/item?id=49355262 . Yes glibc has some backwards compat but you cannot load a binary compiled with a newer version of glibc using an older ld-linux.so. That's because the interdependency. Nor you can load binaries that depend on different libc.so files with glibc systems I cannot comment on macOS, I have never used it. However this is not a problem with Windows. You can ship a newer CRT or you can install it as a system component using Microsoft's MSI. The dependency is one way on Windows. CRT purely depends on Win32. Moreover the loader is completely independent and DLLs are loaded into their own unique scoped namespace unlike Linux that loads them in global symbol namespace. That's why you can mix and match DLLs compiled for different CRT versions. | |||||||||||||||||
| |||||||||||||||||