Связывание с несколькими общими библиотеками, которые все связаны с общей статической библиотекой - PullRequest
7 голосов
/ 08 марта 2010

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

Ответы [ 3 ]

3 голосов
/ 09 марта 2010

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

2 голосов
/ 08 марта 2010

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

0 голосов
/ 30 ноября 2010

Предположим, что две общие библиотеки связаны с различными статическими библиотеками. Но обе статические библиотеки содержат функцию с одинаковым именем. Там будет конфликт.

Я уверен в этом, поскольку у меня есть приложение tcl / tk, оно загружает две библиотеки tcl (.so). Обе библиотеки статически связаны с библиотекой openssl. но с другой версией. Ошибка сегментирования произошла, когда я запускаю приложение tcl. Я прослеживаю это в openssl. В новой версии изменена реализация функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...