共享库仅绑定到不处理的库

时间:2012-09-05 09:24:57

标签: c++

我对共享库有以下问题

创建一个共享的libraray

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 个答案:

答案 0 :(得分:0)

运行时加载的库的加载,尤其是重新加载语义是非常平台和特定于实现的。最好不要依赖任何类型的全局状态,而是将显式初始化函数传递给库。也许是这样:

library_context_t context;

/* dlopen, dlsym, ... */

library_init(&context);

library_do_thing(&context);

// ...

library_destroy(&context);

// maybe unload, or reuse

Linux特别是重新加载已加载的库。