Рассмотрим следующую ситуацию:
- программа с именем
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показывает, что это не так.
Кажется странным, что нужно перекомпилировать (переконфигурировать) каждый двоичный, который зависит от некоторой библиотеки каждый раз, когда изменения в библиотеке меняются. Какие решения у меня есть для предотвращения этого?