Статические функции в статической библиотеке общего объекта - PullRequest
0 голосов
/ 23 января 2012

У меня есть приложение, которое использует общие объекты (*.so) в качестве плагинов, которые загружаются во время выполнения. У меня также есть статическая библиотека (*.a), которая содержит несколько статических функций. Если PluginA и PluginB ссылаются на библиотеку, они также получат свои собственные копии статических функций?

1 Ответ

0 голосов
/ 22 июня 2016

Да, оба плагина получат свои собственные копии функций / символов, содержащихся в статической библиотеке .a. Для использования в разделяемых библиотеках или плагинах библиотека .a должна быть независимым от позиции кодом, чего можно добиться с помощью опции -fPIC при компиляции и во время компоновки.

Вы также должны убедиться, что PluginA и PluginB не имеют dlopened () с опцией RTLD_GLOBAL, поскольку могут быть столкновения имен между двумя копиями статической библиотеки, содержащейся в PluginA и PluginB. Эта проблема именных коллизий становится еще более заметной в разделяемых библиотеках, если вам нужно динамически связывать PluginA и PluginB во время компиляции.

...