Соединение против нескольких общих библиотек, которые все связали против общей статической библиотеки

Скажите, что у Вас есть 2 библиотеки доли, lib1.so и lib2.so, это у обоих есть libcommon.a, статически связанный в них. Компилятор жаловался бы на неоднозначную ссылку символа, если бы необходимо было динамично связать и lib1.so и lib2.so? Или был бы компилятор быть достаточно умным, чтобы знать, что libcommon символы совместно используются lib1 и lib2 и позволяют Вам динамично связываться против обоих?

7
задан live2dream95 8 March 2010 в 18:49
поделиться

2 ответа

Статическая библиотека будет использоваться для разрешения внутренних ссылок, но внешние ссылки не будут распространяться на интерфейс разделяемой библиотеки, так что не будет никакого конфликта. Каждая разделяемая библиотека будет включать свою собственную копию кода статической библиотеки.

2
ответ дан 7 December 2019 в 12:18
поделиться

Конфликта не будет, потому что при компоновке с разделяемыми библиотеками компоновщик будет использовать определение из первой разделяемой библиотеки, которая предоставляет символ, и не будет дальше смотреть на другие разделяемые библиотеки. Символы, включенные из .a, будут экспортированы в обе разделяемые библиотеки, но не будут конфликтовать.

3
ответ дан 7 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: