【问题标题】:Calling C++ from Python without modifying C++ code在不修改 C++ 代码的情况下从 Python 调用 C++
【发布时间】:2021-07-05 06:37:52
【问题描述】:

我有几个(比如说 5-10 个)大型 C++ 项目。每个考虑大约 30-50 个文件。这些项目由其他团队维护,我无法修改他们的代码。完全没有。

我需要在一个 Python 脚本中调用这些项目,该脚本应该从所有项目中调用函数(显然,这些项目中的每个顶级函数都会创建一个跨越多个文件的大型调用树)。

有没有办法从这些大型 C++ 项目中调用 Python 中的 C++ 函数不修改任何 C++ 代码?

【问题讨论】:

  • 当您说您不能“更改”他们的代码时,是否包括添加代码?

标签: python c++ ffi cross-language


【解决方案1】:

是的,这是可能的。像 OpenCV 这样的主要库是用 C++ 实现的,并且有 Python 绑定以在 Python 中使用它们。

有许多相互竞争的方法可以实现这一点,您可以阅读overview here。我相信现在最常见的是 Cython 和 PyBind11。

从 Python 调用 C 或 C++ 基本上涉及定义 Python 可以理解的接口(与 C 和 C++ 代码使用的数据类型相互转换),并编译该接口。 Cython 之类的工具允许您使用接近 Python 的语言编写该接口,并为您生成相应的、相当难看的 C++ 接口,以便对其进行编译。

请注意,您只需为要使用的函数编写接口,而不管这些函数将生成的“调用树”如何。您根本不必接触 C++ 项目,只需添加可以存在于您的项目中的接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多