Отсутствует символическая ссылка в / usr / local / lib

Для моей встроенной платы linux (TI AM335x) у меня есть SDK, содержащий подпапки sysroot и файловую систему. Например. для libz:

sysroot /…/ usr / lib содержит:

libz.so         # symbolic link to libz.so.1.2.7
libz.so.1       # symbolic link to libz.so.1.2.7
libz.so.1.2.7

Файловая система / usr / lib / содержит

libz.so.1       # symbolic link to libz.so.1.2.7
libz.so.1.2.7

Файловая система не содержит символической ссылки libz.so -> libz.so.1.2.7. Но мой компоновщик этого хочет. И я добавил это.
Мои вопросы: Есть ли какая-то общая причина, по которой не предоставляются такие символические ссылки? Какая цель достигается этим?

2

Решение

Причина этого заключается в том, что программы, ссылающиеся на библиотеку, могут указывать только «soname», которое связано с «настоящим именем» библиотеки. Если вы решите обновить библиотеку, компоновщик теперь будет ссылаться на последнюю версию, а не всегда менять конфигурацию компоновщика. Если вы хотите больше информации об этом, проверьте Вот.

2

Другие решения

 Is there any common reason not provide such symbolic links? Which goal is achieved by that?

Единственная причина для беспокойства — это изменение API библиотеки между версией символической ссылки библиотеки и установленной библиотекой. В этом случае вы либо получите ошибку компоновщика, если нужное имя функции не найдено, либо вы получите неработающий код, если все имена совпадают, но работа данной функции изменилась в разных версиях. Когда вы вручную создаете символические ссылки на общие библиотеки, вы возьмите на себя ответственность за обеспечение того, чтобы нужные вам вызовы библиотеки совпадали между версиями библиотеки общего объекта. Как правило, когда библиотека меняет свою soname (имя общего объекта), это происходит потому, что в библиотеке произошли некоторые изменения, которые пользователи этой библиотеки должны знать и подтверждать правильное использование. Тот факт, что вам нужно libz.so и ваша система имеет libz.so.1 указывает на такое изменение или сонама удар произошло. Вы должны подтвердить, что функции, которые вам нужны от libz.so присутствуют и остаются неизменными в libz.so.1, (в большинстве случаев библиотеки обратно совместимы, но иногда они не [например, libpng-1.2 и libpng-1.4])

В этом весь смысл с сонамами. Когда вы попадаете в ситуацию, вам нужно либо создать символическую ссылку вручную, либо понизить libz, чтобы получить необходимую libz.so — изменение сонама говорит вам, что между libz.so и libz.so.1 произошли изменения в библиотеке так что это зависит от вас, чтобы убедиться, что вы можете использовать libz.so.1 символическая ссылка на libz.so так, как вы пытаетесь это сделать.

Зачем вам вообще нужна символическая ссылка? Почему ваш код не должен быть счастлив, просто используя libz.so.1 на месте libz.so без символической ссылки? Код, который вы компилируете, ищет libz.so, Как вы обнаружили, его нет в вашей системе. Предоставляя libz.so -> libz.so.1 символическая ссылка, которую вы позволяете найти свой код libz.so.1 через имя libz.so без изменения вашего кода. Создание символической ссылки — это просто хак для обхода исправления кода для работы с libz.so.1, В зависимости от вашего доступа к коду в любой из систем, это может быть необходимо, но правильный способ справиться с этой ситуацией — обновить обе системы и код для сборки с использованием текущей библиотеки. libz.so.1

Все это, как говорится, если изменения в libz.so.1 не влияет ни на какую часть libz.so вам нужно использовать, тогда символическая ссылка работает просто отлично.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector