Загрузка нескольких общих библиотек с разными версиями

У меня есть исполняемый файл в Linux, который загружаетlibfoo.so.1 (этоSONAME) как одна из его зависимостей (через другую разделяемую библиотеку). Он также ссылается на другую системную библиотеку, которая, в свою очередь, ссылается насистема версия,libfoo.so.2, В следствии,и то и другое libfoo.so.1 а такжеlibfoo.so.2 загружаются во время выполнения, и код, который должен был вызывать функции из библиотеки с версией 1, в конечном итоге вызывает (двоично-несовместимые) функции из более новой системной библиотеки с версией 2, потому что некоторые символы остаются прежними. Результатом обычно является разрушение стека и последующий сегмент.

Теперь библиотека, которая ссылается на более старую версию, является сторонней библиотекой с закрытым исходным кодом, и я не могу контролировать, какая версияlibfoo это компилируется против. Предполагая, что единственный оставшийся вариант - это перестройка группы системных библиотек, которые в настоящее время связаны сlibfoo.so.2 связать сlibfoo.so.1.

Есть ли способ избежать замены системных библиотек локальными копиями, которые ссылаются на старыеlibfoo? Могу ли я загрузить обе библиотеки и получить код, вызывающий правильную версию символов? Так что мне нужно специальное управление версиями на уровне символов?

Ответы на вопрос(2)

Ваш ответ на вопрос