Почему системы Unix / Linux не просматривают каталоги, пока не найдут требуемую версию связанной библиотеки?

Это происходит потому, что все модули ядра не зачищены. Чтобы уменьшить его размер, его нужно разделить.

Используйте эту команду:

SHW@SHW:/tmp# cd /lib/modules/<new_kernel>
SHW@SHW:/tmp# find . -name *.ko -exec strip --strip-unneeded {} +

Это значительно уменьшит размер. После выполнения вышеуказанной команды можно приступать к созданию initramfs/initrd

17
09.04.2019, 14:23
1 ответ

But why does it not do the same until it finds the expected version rather than accepting the first instance of library irrespective of its version?

Да, насколько ему известно. zlib.so.1.2.7и zlib.so.1.2.8оба имеют soname zlib.so.1, поэтому ваши двоичные файлы alphaи bravoговорят, что им нужно zlib.so.1. Динамический загрузчик загружает первую найденную подходящую библиотеку; он не знает, что версия 1.2.8 предоставляет дополнительные символы, которые нужны bravo. (Вот почему дистрибутивы стараются указать дополнительную информацию о зависимостях, такую ​​как zlib1g (>= 1.2.8)для bravo.)

Вы можете подумать, что это должно быть легко исправить, но это не так, не в последнюю очередь потому, что двоичные файлы и библиотеки перечисляют нужные им символы отдельно от нужных им библиотек, поэтому загрузчик не может проверить, что данная библиотека предоставляет все символы, которые необходимы от него. Символы могут предоставляться различными способами, и введение связи между символами и библиотеками, предоставляющими их, может привести к поломке существующих двоичных файлов.Есть также дополнительное удовольствие от вставки символов, чтобы все усложнить (и заставить чувствительных к безопасности -разработчиков рвать на себе волосы ).

Некоторые библиотеки предоставляют информацию о версии, которая в конечном итоге хранится в .gnu.version_rсо ссылкой на предоставляющую библиотеку, которая могла бы здесь помочь, но libzне входит в их число.

(Учитывая сонимы, я ожидаю, что ваш двоичный файл alphaбудет нормально работать с zlib.so.1.2.8.)

28
27.01.2020, 19:47

Теги

Похожие вопросы