RFC: rpm auto-glib version enforcement

Mike Hearn mike at navi.cx
Sun Mar 20 19:39:35 UTC 2005


On Sun, 20 Mar 2005 18:20:03 +0100, Axel Thimm wrote:
> Isn't compatibility broken (be it forward or backward), if I build
> against glib 2.6, but ldd still allows runtime linking against glib
> 2.4 which is missing symbols?

No, that's just a side effect of lazy fixup. The symbol isn't relocated
until its needed, which means you can eg click a menu item and have the
app abort because it called a symbol that was missing.

Adding 1-level symbol versions (which is supported by Solaris, Linux,
and possibly FreeBSD too but not Windows or MacOS) solves this problem by
giving the linker an efficient way to check the correct minor version is
available at runtime. If it's missing, the app terminates at startup
instead of at some unpredictable point in the future and even better, RPM
can check at install time.

As Owen has said though, very few libraries do this and it's hard to
introduce retro-actively. Getting upstream authors to do it would be a
long term project, but that's not a big deal, this isn't a huge
stop-the-presses problem either.

One possible hack would to be get RPM to invoke the linker on each
binary in a mode where it performs all the relocations ahead of time then
aborts. I think there is actually already such a mode, ldd is just a shell
script that uses it. That way you can check that all the symbols it needs
are present. But this is a big hack and not a replacement for symvers
because RPM only finds it out *after* the install, not at dep checking
time.

thanks -mike




More information about the fedora-devel-list mailing list