遇到一个头疼的问题,兄弟部门需要调用我的代码,
我把代码封装成了.so 动态库给他们使用。他们会写很多测试 case ,每个 case 依次运行,运行时首先使用 dlopen 装载我的库,运行完毕后使用 dlclose 卸载。下一个 case 重新使用 dlopen 装载。
目前遇到的问题是,在第二次 dlopen 之后,我的库里的全局变量的值仍然是上一次运行之后剩下的。而我期望在 dlclose 之后,全局变量们应该被析构掉,在 dlopen 之后重新构造以及初始化。
我询问 AI 得到的信息是,dlclose 之后如果引用计数为 0 ,那么会进行我期望的析构过程。但是没有直接手段能查看引用计数。可能导致引用计数不为 0 的原因包括:多次 dlopen 只有一次 dlclose ;引用的其他动态库依赖了我的库。其中第一条我认为不可能,我通过断点和日志能确信只有一次 dlopen 和一次 dlclose 。第二条也不可能,我查看了所有动态库的依赖库,没有任何一个依赖我的库。
我在 dlclose 和 dlopen 的时候均进行了检查,两次 dlopen 和一次 dlclose 都是成功的,没有错误信息。
求问有没有大佬遇到过类似的情况,要被搞疯了。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/1157377
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.