Статическое и динамическое связывание одной и той же библиотеки

StackOverflow https://stackoverflow.com/questions/1236495

Вопрос

У меня есть программа, которая статически ссылается на библиотеку (libA.2.0.a), а также динамически ссылается на другую библиотеку (libB.so). libB.so также динамически ссылается на более старую версию libA (libA.1.0.so).

Возможна ли такая конфигурация?И если да, то как система узнает, что нужно использовать символы из libA.2.0.a для моей программы и символов из libA.1.0.so для libB.so?

Это было полезно?

Решение

Да, такая конфигурация возможна.

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

При сборке libB.so он устанавливает ссылки на libA.1.0.so.Он не знает и не заботится о том, что будут делать другие приложения, которые его используют, он просто знает, как отображать вызовы собственных функций.

При создании самого приложения оно ссылается на libB.so.Что бы ни вызывал libB.so, приложению это совершенно неизвестно.Приложение также статически ссылается на библиотеку, о которой libB.so не заботится.

Одна ошибка:если libA использует статические переменные, для libB.so будет доступен один набор статических переменных, а для приложения — другой, независимый набор статических переменных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top