I'm planning to migrate a site of about two dozen desktops from FC3 to FC5. One of the apps we use requires LD_ASSUME_KERNEL=2.4.9 on FC3. I have been unable to run it on FC5. The LD_ASSUME_KERNEL setting, of course, breaks everything on FC5 because the appropriate version of glibc is not present.
The error I get is
relocation error: [ ... ] : symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
apparently because 'errno' is defined differently in the NPTL-version of glibc.
The obvious fix is to patch the source and recompile, but unfortunately the app is Closed-Source Legacy Crap (TM) from Big Unresponsive Company Ltd.
Any ideas? Is it possible to compile a non-NPTL binaries of glibc 2.4? I'm willing to try any kind of ugly hacks, including but not limited to, editing symbol tables in binaries.
Mikko
Mikko Huhtala wrote:
I'm planning to migrate a site of about two dozen desktops from FC3 to FC5. One of the apps we use requires LD_ASSUME_KERNEL=2.4.9 on FC3. I have been unable to run it on FC5.
There is a feature of glibc that allows running an app under a completely different glibc. This feature is used when testing a new glibc. Invoke ld-linux directly and specify "--library-path list:of:directories" (which overrides LD_LIBRARY_PATH for this execve only) before the rest of the command line: /path/to/old/glibc/ld-linux.so.2 --library-path /path/to/old/glibc:$LD_LIBRARY_PATH app arg1 ...
See also this web page which contains more explanation and some helper code to run an "indirect runtime loader": http://BitWagon.com/rtldi/rtldi.html