Python c++ 程序中函数的绑定

Python binding of functions within a c++ program

我有一个用 C++ 编写的程序,它可以独立运行,但是我们想让 Python 可以访问它。具体来说,我们有几个在 C++ 中效率更高的函数,但我们使用 Python 脚本对输出做了很多其他事情。我不想在 Python 中重写整个 main(),因为我们使用了 Boost 的求根算法和其他功能,而这些功能在 Python 中很难实现。

是否可以在保留 c++ main() 的同时向这些函数添加 Python 绑定?我以前从未做过 Python 绑定,但我看过 Boost.python 因为我们已经在使用 Boost。大多数示例在 hpp 文件中使用 c++ functions/classes 并将它们嵌入到 python 程序中,这并不是我们想要的。

我们想要的是让我们的 c++ 程序保持独立,这样它就可以 运行 如果用户需要,还允许用户从 Python 程序中调用这些函数。能够使用相同的 Makefile 和 exe 会很棒。我们真的不想制作一个单独的包含绑定函数的 C++ 库;我们对制作代码的 pythonic 版本不感兴趣,只允许访问这些有用的功能。

谢谢

我们有一个扩展的 c++ 库,我们通过使用 python 包装器 class 调用我们在 boost python 中定义的接口,使 python 可用.

一个 python class 以 pythonic 方式处理所有查询,通过调用一个 python 用 c++ 编写的带有 boost python 的扩展模块. python 扩展执行 c++ 代码,因此它可以 link 并使用原始库中的任何内容。

不过你说你的c++是一个可执行文件。为什么不能使用系统调用来启动 shell 进程?您可以使用任何语言执行此操作,包括 python。我的想法是您想访问单个函数,这意味着您需要将所有函数都放在一个静态库中。

您正常构建您的 c++ exe,link使用通用代码。你制作了一个 "boost python extension module" ,其中 link 是通用代码,并且可以通过 python 脚本导入。当然还有一个单元测试可执行文件,它 links 和测试通用代码。我的偏好是公共代码是独立的静态库(如果有 posix gcc 构建,则使用 -fPic)。