1

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

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

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

谢谢

4

1 回答 1

1

我们有一个扩展的 c++ 库,我们通过使用一个调用我们在 boost python 中定义的接口的 python 包装类来提供给 python。

一个 python 类以 python 的方式处理所有查询,方法是使用 boost python 调用用 c++ 编写的 python 扩展模块。python 扩展执行 c++ 代码,因此它可以链接和使用原始库中的任何内容。

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

您通常构建您的 c++ exe,链接公共代码。您制作了一个链接公共代码的“boost python 扩展模块”,并且可以通过 python 脚本导入。当然还有一个单元测试可执行文件,它链接和测试公共代码。我的偏好是公共代码是独立的静态库(如果有 posix gcc 构建,请使用 -fPic)。

于 2016-07-27T23:42:32.023 回答