我在加载 dll 时遇到了一个新问题。我在加载带有“.so”、“.dll”扩展名的 dll 时没有任何问题。现在我对带有“.a”扩展名的 dll 有一些问题。它是一个静态库。下面是我的代码
Security_dll = ctypes.cdll.LoadLibrary("./staticlibraryname.a")
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我的 os env 是一个 linux open suse。当我尝试这样做时,我得到的确切错误消息是:
File "module3.py", line 3, in <module>
Security_dll = ctypes.cdll.LoadLibrary("./libSecurityProductionStaticlib.a")
File "/usr/lib64/python2.7/ctypes/__init__.py", line 440, in LoadLibrary
return self._dlltype(name)
File "/usr/lib64/python2.7/ctypes/__init__.py", line 362, in __init__
self._handle = _dlopen(self._name, mode)
OSError: ./libSecurityProductionStaticlib.a: invalid ELF header
Run Code Online (Sandbox Code Playgroud)
您不能将静态库加载到正在运行的代码中。只能加载动态链接库(.so 和 .dll)。静态库和动态库具有不同的格式、属性和用途。静态库只能在编译时与其他对象链接,而不能在运行时链接。Linux 上的动态库本质上是一个没有 main 函数的 ELF 文件。静态库是函数的存档。