python - 在不修改 C++ 代码的情况下从 Python 调用 C++
问题描述
我有几个(比如说 5-10 个)大型 C++ 项目。每个考虑大约 30-50 个文件。这些项目由其他团队维护,我无法修改他们的代码。完全没有。
我需要在 Python 脚本中调用这些项目,该脚本应该从所有项目中调用函数(显然,这些项目中的每个顶级函数都会创建一个跨越多个文件的大型调用树)。
有没有办法在不修改任何 C++ 代码的情况下从这些大型 C++ 项目中调用 Python 中的 C++ 函数?
解决方案
对的,这是可能的。像 OpenCV 这样的主要库是用 C++ 实现的,并且有 Python 绑定以从 Python 中使用它们。
有许多相互竞争的方法可以实现这一点,您可以在此处阅读概述。我相信现在最常见的是 Cython 和 PyBind11。
从 Python 调用 C 或 C++ 基本上涉及定义 Python 可以理解的接口(与 C 和 C++ 代码使用的数据类型相互转换),并编译该接口。Cython 之类的工具允许您使用接近 Python 的语言编写该接口,并为您生成相应的、相当难看的 C++ 接口,以便对其进行编译。
请注意,您只需为要使用的函数编写接口,而不管这些函数将生成的“调用树”如何。您根本不必接触 C++ 项目,只需添加可以存在于您的项目中的接口。
推荐阅读
- c# - 通过 C# 中的 linq 表达式在多个维度中选择特定值
- jenkins - 我需要更改 jenkins 中各个作业的结果集/输出文件夹路径,这可能吗?如果是,如何配置?
- oracle - Impala 中的 fnv_hash() 与 oracle 哈希值
- r - R 和 sra 工具包 - 奇怪的 system() 行为
- latex - 如何在乳胶中的矩阵上方添加一个字母
- android - 未处理的异常:空值检查运算符用于空值......飞镖中的空安全
- excel - 如果复选框设置为 False,则 Vba 停止数据输入表输入数据
- python - 在开发 FastAPI 服务器时,如何像在 jupyter 笔记本中一样检查每个变量?
- python - 使用 Plotly Dash 进行服务器端缓存
- ios - Xcode 13 - “按钮”标题没有消失