LINUX.ORG.RU

Динамическая линковка без номера версии библиотеки

 ,


0

1

Так получилось, что передо мной встала задача сборки бинарника, переносимого между разными вариантами Linux.

Проблема в том, что в зависимости записывается конкретная версия libssl (например, 'libssl.so.6'), и при попытке запуска бинарника на машине с другой версией получаем ругань на отсутствие библиотеки. Разумеется, создание симлинка на libssl.so.6 помогает, и все отлично работает.

Возможно ли заставить ld линковаться именно с libssl.so без номера версии? Статическая линковка мне не подходит.

★★★

Последнее исправление: Minoru (всего исправлений: 2)

Разумеется, создание симлинка на ... помогает

ну, это если апи не сменился. иначе - капут же..

чем не подходит статическая линковка?

aol ★★★★★
()

О, разрешили теги из одной буквы. Это хорошо.

d ★★★★
()

Как бы тебе объяснить по-мягче. Эти циферки специально придумали чтобы различать бинарно несовместимые библиотеки. Бинарник собранный с libssl.so.6 может работать только с ней, если ты попытаешь подпихнуть ему другую версию может случиться что угодно, от невозможности запуститься из-за unresolved символов в лучшем случае и сегфолтов на ровном месте до тихого повреждения данных и вообще любых спецэффектов в худшем.

То что у тебя что-то работает с симлинком ничего не значит. Может тебе повезло и ты не используешь части ABI совместимых которых поломалась, может ты просто не видишь что у тебя всё сломано. Главное, ты не имеешь никаких гарантий что бинарник у кого-то в чуть другом окружении либо на чуть других входных данных вообще заработает.

slovazap ★★★★★
()

Можно вообще с либой не линковаться, грузить ее ручками и ручками же вытаскивать указатели на функции. Будет работать 100%, но полезным будет уточнять версию API и в зависимости от него хорошенько обложить код if-ами.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.