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

у меня есть следующая проблема с общими библиотеками

создать общий библиотека

class A
{
static int callCount;
A() { callCount++; }
}
int A:callCount = 0;
class Main
{
Main()
{
A a1();
A a2();
}
}

Теперь создайте процесс, который загружает эту общую библиотеку несколько раз, и я хотел бы, чтобы callCount принадлежал только общей библиотеке, а не всему процессу

dlopen("shared.so", RTLD_LAZY);
// after some code i can construct Main()
// and now i will open the shared object again
dlopen("shared.so", RTLD_LAZY);
// now if i construct Main from the new library i want to have a new
// initialized callCount eq 0 but its 2

Как я могу решить эту проблему

1

Решение

Загрузка, а особенно перегрузка Семантика загруженных библиотек во время выполнения очень зависит от платформы и реализации. Лучше не полагаться на какое-либо глобальное состояние, а вместо этого передавать явную функцию инициализации в свою библиотеку. Может быть так:

library_context_t context;

/* dlopen, dlsym, ... */

library_init(&context);

library_do_thing(&context);

// ...

library_destroy(&context);

// maybe unload, or reuse

Linux в частности делает не перезагрузите библиотеку, которая уже была загружена.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector