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
库如何在未明确指定的情况下加载?是否加载了标准库中的所有共享库?幕后发生的事情我不明白。
答案 0 :(得分:4)
注意:您在 Nix上遇到此问题(在 Win 上,它无法重现)。
查看[SO]: How to check whether a file exists without exceptions? (@CristiFati's answer)。
在项#4 的最后一部分(注释部分) / strong>,我解释了这个确切的场景,引用了[man7]: DLOPEN(3)中的以下段落:
如果 filename 为NULL,则返回的句柄为main 程序。当赋予 dlsym ()时,此句柄会导致搜索a 主程序中的符号,后跟加载的所有共享对象 程序启动,然后由 dlopen ()加载的所有共享对象 标志 RTLD_GLOBAL 。
在加载库时使用,根据[Python 3]: Loading shared libraries:
所有这些类都可以通过使用至少一个参数(共享库的路径名)调用它们来实例化。如果已有已加载的共享库的现有句柄,则可以将其作为
handle
命名参数传递,否则使用基础平台dlopen
或LoadLibrary
函数将库加载到这个过程,并掌握它。