【问题标题】:How does ctypes.cdll.LoadLibrary(None) work?ctypes.cdll.LoadLibrary(None) 是如何工作的?
【发布时间】:2019-01-30 00:34:41
【问题描述】:

ctypes.cdll.LoadLibrary() 调用如何与作为参数传入的None 一起工作?当我尝试下面的代码时,似乎math 库会自动加载:

>>> import ctypes
>>> lib = ctypes.cdll.LoadLibrary(None)
>>> lib.sin
<_FuncPtr object at 0x7f36dd65f430>
>>> lib.exp
<_FuncPtr object at 0x7f36dd65f4f8>
>>> 

math 库如何在没有明确指定的情况下被加载?标准库中的所有共享库都被加载了吗?幕后发生了一些我不明白的事情。

【问题讨论】:

    标签: python python-3.x ctypes


    【解决方案1】:

    注意:您在 Nix 上遇到过这种情况(在 Win 上无法重现)。

    看看[SO]: How to check whether a file exists without exceptions? (@CristiFati's answer)
    item #4的最后一部分(Notes部分) ,我解释了这个确切的场景,引用了[man7]: DLOPEN(3)的以下段落:

    如果 filename 为 NULL,则返回的句柄用于主 程序。当给 dlsym() 时,此句柄会导致搜索 主程序中的符号,后跟加载的所有共享对象 程序启动,然后由 dlopen() 加载的所有共享对象 RTLD_GLOBAL 标志。

    加载库时使用,根据[Python 3]: Loading shared libraries:

    所有这些类都可以通过使用至少一个参数调用它们来实例化,即共享库的路径名。如果你有一个已经加载的共享库的句柄,它可以作为handle命名参数传递,否则底层平台dlopenLoadLibrary函数用于将库加载到进程中,并获取一个句柄。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多