首页 > 解决方案 > 在不修改 C++ 代码的情况下从 Python 调用 C++

问题描述

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

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

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

标签: pythonc++fficross-language

解决方案


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

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

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

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


推荐阅读