【问题标题】:Call into static C library from Python [closed]从 Python 调用静态 C 库 [关闭]
【发布时间】:2019-12-19 12:10:50
【问题描述】:

我有一个静态 C 库,我需要从 Python 调用它。我正在为此查看ctypes,但是它只能与动态加载的库一起使用。静态链接库是否有等效或替代方法?

【问题讨论】:

  • 单独的静态库几乎没有用。它应该链接到 ELF(或 Win 上的 PE)。

标签: python c static-libraries


【解决方案1】:

你不能;静态库用于链接以创建新的可执行文件或动态库,仅此而已。但是你可能可以create a dynamic library from a static one (more info here),这取决于静态库的编译方式。

【讨论】:

  • 我相信,他们可以通过构建带有静态库使用扩展的 CPython 来做到这一点。但我倾向于猜测他们不准备走那么远。
  • @JohnBollinger:是的,他们可以通过任何适当的方式进行实际的 Python 扩展;我的回答是“使静态库可以从 Python 中使用”的最小工作答案,但广泛的答案是“它需要不是静态库”才能使用,其中转换为动态库是众多选项之一(其中没有一个以原始形式加载静态库)。
【解决方案2】:

我用来执行此操作的一个选项是从 C\C++ 应用程序中执行 python 脚本。 Boost.Python 实现是我用来完成此任务的。我将库文件静态链接到 C 应用程序并从应用程序运行 python 脚本。 C 应用程序中调用静态 C 库的方法可以暴露给 python 脚本。

虽然以上是一个解决方案...另一种方法是在 python 中构建一个管道客户端,然后连接到静态链接到您的库的 C 应用程序(运行管道服务器)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多