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

Python binding of functions within a c++ program

本文关键字:Python 绑定 函数 程序 c++      更新时间:2023-10-16

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

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

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

感谢

我们有一个广泛的c++库,我们通过使用python包装器类使其可用于python,该类调用我们在boost python中定义的接口。

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

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

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