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