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

时间:2016-07-27 20:45:52

标签: python c++ boost boost-python python-bindings

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

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

我们想要的是将我们的c ++程序保持为独立,以便它可以像用户一样运行,并允许用户从Python程序中调用这些函数。能够使用相同的Makefile和exe会很棒。我们真的不想创建一个包含绑定函数的单独c ++库;我们对编写pythonic版本的代码不感兴趣,只是允许访问这些有用的函数。

由于

1 个答案:

答案 0 :(得分:1)

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

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

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

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