usted debería ser capaz de hacerlo disponiendo el objeto
mydll = ctypes.CDLL('...')
del mydll
mydll = ctypes.CDLL('...')
EDIT: comentario Hop es correcto, esto desata el nombre, pero la recolección de basura no sucede tan rápido, de hecho, incluso duda que incluso libera la biblioteca cargada.
ctypes no parece proporcionar una forma limpia para liberar recursos, no sólo proporcionan un campo _handle
al mango dlopen ...
Así que la única forma en que veo, realmente, realmente no La forma limpia, es para el sistema de forma dependiente de cerrar el controlador, pero está muy, muy sucio, ya que además ctypes mantiene referencias internas a este identificador. Por lo tanto la descarga toma algo de la forma:
mydll = ctypes.CDLL('./mylib.so')
handle = mydll._handle
del mydll
while isLoaded('./mylib.so'):
dlclose(handle)
Es tan sucio que yo sólo comprobado que funciona usando:
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)
¿Has encontrado una mejor respuesta que mi fea manera? Si no es así, debe preguntar en su lista de correo y, si no está presente, repórtelo. 'del' debería llamar a la función para realease recursos! –