我一直在想这个,但我从来没有真正得到明确的答案。是否可以在boost.python框架内链接另一个boost.python模块。
例如,我在boost_python_module(libA)中导出了类A,在boost_python_module(libB)中导出了函数B(A a)。是否可以在libB中指定链接到libA的A.
另一种看待这个问题的方法是,现在我必须在一个模块中一次性生成所有绑定。是否可以在几个boost_python_module上逐步生成绑定。
答案 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
。