您应该能够通过放置对象来做到这一点
mydll = ctypes.CDLL('...')del mydllmydll = ctypes.CDLL('...')编辑: 霍普的评论是正确的,这取消了名称的绑定,但是垃圾回收不会很快发生,实际上,我什至怀疑它是否会释放已加载的库。
Ctypes似乎没有提供一种干净的方式来释放资源,它仅提供了
_handledlopen句柄的字段…
因此,我所看到的唯一,真正, 非常不干净的方法
是,系统地依赖dlclose句柄,但这是非常不干净的,因为ctypes在内部保留了对该句柄的引用。因此,卸载采用以下形式:
mydll = ctypes.CDLL('./mylib.so')handle = mydll._handledel mydllwhile 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)


