您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Python中使用ctypes卸载DLL?

如何在Python中使用ctypes卸载DLL?

您应该能够通过放置对象来做到这一点

mydll = ctypes.CDLL('...')
del mydll
mydll = ctypes.CDLL('...')

霍普的评论是正确的,这取消了名称的绑定,但是垃圾回收不会很快发生,实际上,我什至怀疑它是否会释放已加载的库。

Ctypes似乎没有提供一种干净的方式来释放资源,它仅提供了_handledlopen句柄的字段…

因此,我所看到的唯一,真正, 是,系统地依赖dlclose句柄,但这是非常不干净的,因为ctypes在内部保留了对该句柄的引用。因此,卸载采用以下形式:

mydll = ctypes.CDLL('./mylib.so')
handle = mydll._handle
del mydll
while isLoaded('./mylib.so'):
    dlclose(handle)

太不干净了,我只检查了它是否可以使用:

def isLoaded(lib):
   libp = os.path.abspath(lib)
   ret = os.system("lsof -p %d | grep %s > /dev/null" % (os.getpid(), libp))
   return (ret == 0)

def dlclose(handle)
   libdl = ctypes.CDLL("libdl.so")
   libdl.dlclose(handle)
python 2022/1/1 18:47:06 有331人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶