Linux下动态库多次动态加载的问题

ahzhuqi 2015-05-28 05:02:03
动态库 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)是同一个数据?
...全文
678 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-05-28
  • 打赏
  • 举报
回复
static变量和全局变量唯一的区别就是作用域不同。我觉得。

64,660

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧