如何链接到现有的boost python模块

时间:2010-06-20 17:19:25

标签: c++ boost boost-python

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

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

另一种看待这个问题的方法是,现在我必须在一个模块中一次性生成所有绑定。是否可以在几个boost_python_module上逐步生成绑定。

2 个答案:

答案 0 :(得分:1)

Boost.Python处理你要求的方法是将你的包分成编译单元as explained in the tutorial,然后在实际声明模块的主编译单元中进行合并。

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

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

答案 1 :(得分:0)

我不太了解共享库,但对我来说有用的是在python中导入我可以互相引用的所有模块:import libA; import libB

当然可以将这些导入放在__init__.py文件中,这样您就可以执行以下操作:import myLib