![]() |
|
Модераторы: xvr |
![]()
|
|
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Интересуют возможности по загрузке/выгрузке динамических библиотек во время выполнения.
Есть подключаемые службы. Каждая служба в своей библиотеке. При работе загружаются необходимые библиотеки, создаются объекты служб (по одному на библиотеку), и работа идет через общие интерфейсы. В библиотеках используются синглтоны и общие данные, а также статические регистрирующие объекты (вызываются конструктора при загрузке библиотеки) для фабрик, от них не избавиться. Хочется загрузить два объекта одной службы, но чтобы общие данные (например синглтоны) у каждой службы били свои. Что-нибудь можно сделать? Делать можно всё что угодно, перекомпилировать, вносить изменения, переименовывать файлы библиотек и/или загружать как бы их разные версии. В основном интересует работа на Linux, *nix, но как на Windows тоже не мешало бы знать. Если есть литература, буду благодарен. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
не храни данные в библиотеке
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
легко сказать. например для фабрики нужен её синглтон, причем создаваемый статической переменной в функции, чтобы вызывать его из разных модулей трансляции во время инициализации. Что-то я не понимаю что нужно сделать чтоб он их разделял. Может окружить общие данные в пространство имен и откомпилировать их с разным именем? Это сообщение отредактировал(а) georain - 19.2.2009, 19:39 |
|||
|
||||
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Всё что описано в первом посте можно делать, для этого нужно компилировать библиотеки с -fvisibility=hidden, это уберет перекрывание имен и скроет общие данные, и для разных версий одной библиотеки иметь различные их имена (или положение) и название основной функции(символа) доступа.
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |