我一直在想这个问题,但是我从来没有得到确切的答案。在boost.python框架内是否可以链接到另一个boost.python模块。

例如,我已经在boost_python_module(libA)中导出了类A,并且在boost_python_module(libB)中导出了函数B(A a)。是否可以在libB中指定链接到libA的A。

解决此问题的另一种方式是,现在我必须在一个模块内一次生成所有绑定(bind)。是否有可能在多个boost_python_module上增量生成绑定(bind)。

最佳答案

Boost.Python处理所需内容的方法是将包划分为as explained in the tutorial编译单元,然后在实际上声明模块的主编译单元中进行合并。

您无法在Boost.Python中链接独立模块,因为它们会声明特定的Python入口点,这些入口点在加载模块时由Python执行。例如,如果二进制模块名称为mod.so,Python解释器将查找一个名为init_mod的函数(即BOOST_PYTHON_MODULE(mod)声明的函数)并执行该函数的代码。在该函数的代码中,它期望找到对象(实例,类等)的Python C-API声明。

例如,如果将mod.so二进制文件链接到另一个模块二进制文件(例如foo.so),则当Python加载mod.so时,它将查找并执行init_mod,而忽略init_foo

关于c++ - 如何链接到现有的Boost Python模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3080185/

10-11 21:57
查看更多