Можно ли использовать LD_PRELOAD для загрузки разных версий glibc? - PullRequest
3 голосов
/ 15 марта 2019

Состав персонажей

  • big-old-app связано со старой версией glibc, скажем glibc-2.12. Я ничего не могу сделать, чтобы изменить это.
  • cute-new-addon.o связан с более новой версией, glibc-2.23. Этот glibc-2.23 находится в нестандартном пути (потому что у меня нет полномочий sudo).

История

Я хочу использовать cute-new-addon.o внутри big-old-app. Обычно я пишу скрипт для выполнения big-old-app, который затем вызывает cute-new-addon.o для выполнения своих трюков. Из командной строки это будет выглядеть так:

$ big-old-app script.txt

Однако, когда я это сделаю, big-old-app будет жаловаться, что cute-new-addon.o не может найти glibc-2.23. Это понятно, потому что я не указал никаких стандартных путей. Что если я сделаю:

$ LD_LIBRARY_PATH=/path/to/mylibs:$LD_LIBRARY_PATH big-old-app script.txt

Это сегфолты! (

Я думаю, это потому, что big-old-app ссылается на более новый mylibc.so.6. При этом реализации больше не являются тем, к чему привык big-old-app, поэтому он вызывает ошибки.

Вопрос

Что касается script.txt, я не думаю, что у меня есть возможность указать более новый mylibc.so.6 перед вызовом cute-new-addon.o. big-old-app и cute-new-addon.o тесно связаны между собой, и я не знаю, когда кому-либо из них понадобится соответствующий glibc.

И да, cute-new-addon.o rpath указывает на /path/to/mylibs, и я могу подтвердить через ldd, что все библиотеки, которые ему нужны, он ищет в /path/to/mylibs.

Можно ли использовать LD_PRELOAD для загрузки двух разных версий glibc? И пусть big-old-app и cute-new-addon.o ищут то, что им нужно, как им угодно?

1 Ответ

2 голосов
/ 15 марта 2019

LD_PRELOAD нельзя использовать, поскольку динамический компоновщик glibc (иногда называемый ld.so или программный интерпретатор; расположение на диске зависит от платформы) совместим только с libc.so.6 (и остальными библиотеками) изта же сборка glibc.

Вы можете использовать явный вызов загрузчика другого glibc вместе с настройками пути к библиотеке, которые заставляют загрузчик загружать объекты glibc из отдельного каталога, а не из системных каталогов.В glibc wiki есть пример, как это сделать.

...