5

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

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

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

4

2 回答 2

1

处理您所要求的内容的 Boost.Python 方法是将包划分为编译单元,如教程中所述,然后在实际声明模块的主编译单元中进行合并。

您不能在 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.

于 2013-08-15T06:53:39.850 回答
0

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

当然可以将这些导入文件放在一个__init__.py文件中,这样你只需要做 whitin python: import myLib.

于 2010-06-29T09:26:19.307 回答