【问题标题】:python load static librarypython加载静态库
【发布时间】:2016-12-09 03:56:10
【问题描述】:

我在加载 dll 时遇到了一个新问题。我在加载带有“.so”、“.dll”扩展名的 dll 时没有任何问题。现在我对带有“.a”扩展名的 dll 有一些问题。它是一个静态库。下面是我的代码

Security_dll = ctypes.cdll.LoadLibrary("./staticlibraryname.a")

顺便说一句,我的 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

【问题讨论】:

  • 您是否在相同的平台/架构上构建了库?
  • 问题是我没有建立图书馆。它是我正在做的一个项目,而 lib 是由另一方给我的。我已请求动态格式的 dll,但请求被拒绝。
  • 假设这是一个 C 库,你必须编写一个 C 程序来调用库中的函数,并将程序与库静态链接。然后你可以从 Python 运行程序。或者,围绕静态库创建一个动态链接的包装器。 stackoverflow.com/questions/2649735/…

标签: python linux dll


【解决方案1】:

您不能将静态库加载到正在运行的代码中。只能加载动态链接库(.so 和 .dll)。静态库和动态库具有不同的格式、属性和用途。静态库只能在编译时与其他对象链接,但不能在运行时链接。 Linux 上的动态库本质上是一个没有 main 函数的 ELF 文件。静态库是函数的存档。

【讨论】:

  • 正如我所说,你不能这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多