我有以下代码
import ctypes
lib1 = ctypes.cdll.LoadLibrary("./mylib.so")
# modify mylib.so (code generation and compilation) or even delete it
lib2 = ctypes.cdll.LoadLibrary("./mylib.so")
问题是lib2
引用的是原来的共享库,而不是新的共享库。如果我在两次调用之间删除mylib.so,我不会得到任何错误。
使用ctypes._reset_cache()
无济于事。
我怎样才能告诉ctypes
真正从硬盘上重新加载库呢?
发布于 2020-05-26 19:50:54
为了稍微简化一下CristiFatis answer,我编写了一个关闭库函数。以下代码可用于在您的共享库中进行开发,并从python中调用它(在最新版本中)。
import ctypes
def ctypesCloseLibrary(lib):
dlclose_func = ctypes.CDLL(None).dlclose
dlclose_func.argtypes = [ctypes.c_void_p]
dlclose_func.restype = ctypes.c_int
dlclose_func(lib._handle)
if __name__== "__main__":
lib = ctypes.cdll.LoadLibrary('./mylib.so')
# do things with lib_MyClass
ctypesCloseLibrary(lib)
如果您希望lib
可由lib = ctypes.cdll.LoadLibrary('./mylib.so')
重新加载,则只需调用ctypesCloseLibrary
即可。
https://stackoverflow.com/questions/50964033
复制相似问题