In windows, there is a problem called “DLL HELL” which has been there for many years. I heard that, Vista is going to provide a complete solution to this problem. Unix guys thought about this problem long back and provided solution through “Version scripts” [First implemented in SunOS 2.5 and later also implemented in GCC and linux]. Through version scripts, we can simply maintain versions in shared libraries. When we link an application against a shared library that has versioned symbols, the application itself knows which version of each symbol it requires, and it also knows which version nodes it needs from each shared library it is linked against. Thus at runtime, the dynamic loader can make a quick check to make sure that the libraries you have linked against do in fact supply all of the version nodes that the application will need to resolve all of the dynamic symbols.
Simple version script looks like the following
VERS_1.1 {
global:
foo1;
local:
old*;
original*;
new*;
};
VERS_1.2 {
foo2;
} VERS_1.1;
More info on version scripts is given better in the reference links mentioned in the end.
GCC has added an extension to this and provided an excellent feature for function aliasing. We can do this by adding assember macro like the following in C code.
__asm__(".symver old_foo,foo@VERS_1.1");
__asm__(".symver old_foo1,foo@VERS_1.2");
__asm__(".symver new_foo,foo@@VERS_2.0");
So, for the executables linked with VERS_1.2, a function call to foo will be redirected to old_foo1 internally. Similarly for executables linked with VERS_1.1, function call to foo will be redirected internally to old_foo.
You can find more description about these at
http://people.freebsd.org/~deischen/symver/library_versioning.txt
www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/gnu-linker/version.html
http://snipurl.com/wavf [This original URL is too long.. so snipped it]