Cast of characters
big-old-app
is linked to an old version ofglibc
, sayglibc-2.12
. I cannot do anything to change this.cute-new-addon.o
is linked to a newer version,glibc-2.23
. Thisglibc-2.23
is in a nonstandard path (because I don't have sudo powers).
The story
I want to use cute-new-addon.o
inside big-old-app
. I would normally write a script for big-old-app
to execute, which then calls cute-new-addon.o
to perform its tricks. From the command line, it would look like:
$ big-old-app script.txt
However, when I do that, big-old-app
would complain that cute-new-addon.o
cannot find glibc-2.23
. That's understandable, because I have not specified any standard paths. What if I do:
$ LD_LIBRARY_PATH=/path/to/mylibs:$LD_LIBRARY_PATH big-old-app script.txt
It segfaults! :(
I think this is because big-old-app
references a newer mylibc.so.6
. When doing so, the implementations are no longer what big-old-app
is used to, so it segfaults.
The question
Regarding script.txt
, I don't think I have the ability to specify the newer mylibc.so.6
before invoking cute-new-addon.o
. big-old-app
and cute-new-addon.o
are tightly intertwined that I have no way of knowing when either of them need their corresponding glibc
.
And yes, cute-new-addon.o
rpath
is pointed to /path/to/mylibs
and I can confirm via ldd
that all the libraries it needs, it looks for in /path/to/mylibs
.
Can I use LD_PRELOAD
to load two different versions of glibc
? And let big-old-app
and cute-new-addon.o
look for what they need as they please?