首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >强制ctypes.cdll.LoadLibrary()从文件重新加载库

强制ctypes.cdll.LoadLibrary()从文件重新加载库
EN

Stack Overflow用户
提问于 2018-06-21 16:38:00
回答 1查看 1.8K关注 0票数 4

我有以下代码

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真正从硬盘上重新加载库呢?

EN

回答 1

Stack Overflow用户

发布于 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即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50964033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档