Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何链接到现有的boostpython模块_C++_Boost_Boost Python - Fatal编程技术网

C++ 如何链接到现有的boostpython模块

C++ 如何链接到现有的boostpython模块,c++,boost,boost-python,C++,Boost,Boost Python,我断断续续地想知道这件事,但我从未真正得到确切的答案。在boost.python框架内是否可以链接到另一个boost.python模块 例如,我导出了boost_python_模块(libA)中的类A和boost_python_模块(libB)中的函数B(aa)。是否可以在libB中指定链接到libA的 看待这个问题的另一种方式是,现在我必须在一个模块内一次性生成所有绑定。是否可以在几个boost_python_模块上增量生成绑定 我不太了解共享库,但对我来说,有效的方法是在python中导入所

我断断续续地想知道这件事,但我从未真正得到确切的答案。在boost.python框架内是否可以链接到另一个boost.python模块

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


看待这个问题的另一种方式是,现在我必须在一个模块内一次性生成所有绑定。是否可以在几个boost_python_模块上增量生成绑定

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


当然,可以将这些导入放入
\uuuu init\uuuuu.py
文件中,因此,在python中,您只需执行以下操作:
import myLib

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

您不能在Boost.Python中链接独立的模块,因为它们声明了在加载模块时由Python执行的特定Python入口点。例如,如果二进制模块名为
mod.so
,Python解释器将查找名为
init\u mod
(这就是
BOOST\u Python\u module(mod)
声明的)的函数,并执行该函数的代码。在该函数的代码中,它希望找到对象(实例、类等)的Python C-API声明


如果链接,例如,代码> mod。所以二进制文件到另一个模块二进制(例如,代码> Fo.So.<代码>),当Python加载<代码> mod。所以<>代码>它将< >强> >查找并执行< C++ >代码>如何将从libA创建的对象传递给libB中的函数-如果我理解正确,我可以做你想做的事。我认为对于导出的类型有某种全局注册。所以我首先导入libA(libB依赖于它,因为它使用类A),然后导入libB。您会遇到什么错误(如果有的话)?我相信我实际上也有同样的问题-我有多个相互关联的不同boost::python项目。在Python中,在其中一个中定义的类型在另一个中似乎不可用。我得到“没有TyPython(按值)转换器发现C++类型的错误”。如果我从同一个扩展模块包装,这些问题就会消失……这个问题非常古老,所以我不确定boost是否修复了某些问题,或者OP忽略了一些细节,但我没有在boost版本1.48中观察到这种行为。当使用相同的类型分别编译两个boost::python模块时,可以将一个boost python模块创建的实例传递给另一个boost python模块定义的函数。