免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5418 | 回复: 8

有什么办法强制释放一个没人引用的动态链接库? [复制链接]

论坛徽章:
0
发表于 2010-04-27 09:28 |显示全部楼层
我在aix下写了一个小程序用dlopen打开了一个动态链接库
但是忘了用dlcolse关闭掉

结果在程序退出后重新编译动态链接库时提示
ld: 0711-851 SEVERE ERROR: Output file: libtestso.so
        The file is in use and cannot be overwritten.

用cat想把它覆盖也不行,提示
Cannot open or remove a file containing a running program.

想来是由于没有用dlclose导致.so没有被操作系统释放

有什么办法让操作系统强制释放这种.so呢

另,有没有办法看现在操作系统中加载了多少个这样没人引用的.so

论坛徽章:
0
发表于 2010-04-27 09:40 |显示全部楼层
系统用链表的形式记录了当前引用的so和引用次数,因此可以通过遍历该link list找到对应so,并使其引用计数减去1,当然缺点就是在引用计数为0的情况下,没有free掉这块内存。

论坛徽章:
0
发表于 2010-04-27 09:44 |显示全部楼层
ls说的是系统源码的实现吧? 有什么命令能完成让引用计数减1吗? 

论坛徽章:
0
发表于 2010-04-27 09:54 |显示全部楼层
up

论坛徽章:
0
发表于 2010-04-27 11:42 |显示全部楼层
程序退出时应该自动释放吧?不管程序是否主动调用dlclose()

论坛徽章:
0
发表于 2010-04-27 15:10 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2010-04-27 19:44 |显示全部楼层
没其它进程在用 这个是我临时生成的

退出终端后这个.so还在被使用中

机器不可能随便重启的,一堆人在用

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-04-27 21:04 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2010-04-28 09:01 |显示全部楼层
ls这个程序我没有执行权限 郁闷
=============
ps:我现在程序有用dlclose关闭动态链接库了
但是用genkld还是可以发现 每次运行程序后我的libtestso.so都没有被卸载
真晕 难道aix下所有动态链接库一被打开就不关闭吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP