Рассмотрим следующую ситуацию:
- программа с именем
program
, которая динамически зависит отlibfoo.so
-
libfoo.so
, который не зависит от ничего (ну, это зависит отlibstdc++
и прочее, но я думаю, мы можем опустить это)
program
отлично работает.
Внезапно libfoo
изменяет коды, а некоторые функции теперь используют внутри func_bar()
функцию, предоставляемую другой библиотекой libbar.so
.
libfoo.so
перекомпилируется и теперь зависит от libbar.so
. program
остается неизменным, он все еще зависит только от libfoo.so
.
Теперь, когда я выполняю program
, он жалуется, что не может найти func_bar()
.
Вот мои вопросы:
-
libfoo.so
интерфейс не изменился, а только его реализация. Почемуprogram
имеет ссылку явно сlibbar.so
? - Не рекурсивно ли дерево зависимостей? Я бы подумал, что поскольку
libfoo.so
зависит отlibbar.so
,libbar.so
было бы автоматически добавлено в список зависимостейprogram
, без перекомпиляции. Однакоldd program
показывает, что это не так.
Кажется странным, что нужно перекомпилировать (переконфигурировать) каждый двоичный, который зависит от некоторой библиотеки каждый раз, когда изменения в библиотеке меняются. Какие решения у меня есть для предотвращения этого?