我想在我的C++应用程序中嵌入一个Python解释器,并使它们相互调用。我遵循了pybind11官方文档中的示例,现在我可以调用python子程序,并在c++的主程序中创建python类的对象,但我的python类需要从c++基类派生。
虽然有一个关于在python中派生c++基类的官方示例,但它是用c++模块(以*.so文件的形式(扩展python,而不是将python解释器嵌入到c++应用程序中。
在我的项目中不会有共享库(*.so(文件,如果我在python中import myCppModule
,它会在哪里找到模块?我应该如何提供C++中的模块?
如果我盲目地将*.so文件作为python的模块,我可能会遇到链接冲突吗?因为我的基类将有两个二进制代码副本,一个副本位于主可执行文件中,另一个位于共享库中。
对不起,我英语不好。
根据@unddoch的指令,我发现如果我们使用PYBIND11_EMBEDDED_MODULE
宏而不是PYBIND11_MODULE
,我们可以在c++主可执行文件中直接导出python的模块,而无需导出共享库文件。也许这可以帮助其他人,所以我把它写在这里。