Linux下动态库多次动态加载的问题
动态库 libtest03.so 的代码:
--------------------------------------------------------------
class Test03
{
public:
int m_Int1;
int m_Int2;
public:
Test03()
{
m_Int1 = 0;
m_Int2 = 0;
}
};
static Test03 _test03;
#ifdef __cplusplus
extern "C" {
#endif
extern void ChangeTest03(int i1, int i2)
{
_test03.m_Int1 = i1;
_test03.m_Int2 = i2;
}
extern void PrintTest03()
{
printf("%d, %d\n", _test03.m_Int1, _test03.m_Int2);
}
#ifdef __cplusplus
}
#endif
调用程序代码:
int main(int argc, char *argv[])
{
typedef void (* ChangeTest03)(int i1, int i2);
typedef void (* PrintTest03)();
void *handle1 = dlopen("libtest03.so", RTLD_NOW);
ChangeTest03 fChange1 = (ChangeTest03)dlsym(handle1, "ChangeTest03");
PrintTest03 fPrint1 = (PrintTest03)dlsym(handle1, "PrintTest03");
void *handle2 = dlopen("libtest03.so", RTLD_NOW);
ChangeTest03 fChange2 = (ChangeTest03)dlsym(handle2, "ChangeTest03");
PrintTest03 fPrint2 = (PrintTest03)dlsym(handle2, "PrintTest03");
fPrint1();
fPrint2();
fChange1(10, 20);
fChange2(100, 200);
fPrint1();
fPrint2();
return 0;
}
运行结果:
0, 0
0, 0
100, 200
100, 200
如上代码,两次加载libtest03.so ,修改的值(static Test03 _test03)是同一个数据?