问题标签 [boost-python]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
11821 浏览

c++ - 从 C++ 调用 Python 函数

我正在尝试从 C++ 实现调用 Python 函数。我以为可以通过函数指针来实现,但似乎不可能。我一直在使用boost.python来实现这一点。

假设在 Python 中定义了一个函数:

现在我需要将此函数传递给 C++,以便可以从那里调用它。如何在 C++ 端编写代码boost.python来实现这一点?

0 投票
1 回答
899 浏览

c++ - Boost::Python 为具有继承的类绑定

我试图弄清楚一些自动生成的(使用 Pyste)boost::python 代码有什么问题,但到目前为止还没有运气。

有 C++ 库 Magick++,它提供了两个类,Magick::Drawable以及Magick::DrawableRectangle

https://www.imagemagick.org/subversion/ImageMagick/trunk/Magick++/lib/Magick++/Drawable.h

这些用作以下参数Image.draw()https ://www.imagemagick.org/subversion/ImageMagick/trunk/Magick++/lib/Magick++/Image.h

我正在尝试为它制作 python 绑定,所有类都有自动生成的包装器,

http://bitbucket.org/dan.kluev/pythonmagick/src/65d45c998ef3/src/_Drawable.cpp

http://bitbucket.org/dan.kluev/pythonmagick/src/65d45c998ef3/src/_DrawableRectangle.cpp

http://bitbucket.org/dan.kluev/pythonmagick/src/65d45c998ef3/src/_Image.cpp

问题是,由于从 DrawableBase 到 Drawable 的间接类转换,这些包装器不起作用:

有没有比在 C++ 中编写我自己的 draw() 包装器更好的方法来处理这个问题,它将 PyObject 转换为 Drawable?

0 投票
3 回答
2349 浏览

c++ - 使用 boost.python 时 c++ 流有什么问题?

更新 2:我不确定为什么这仍然被赞成(2014 年 3 月)。自从我多年前问过这个问题以来,这似乎已经解决了。确保您使用的是最新版本的 boost。

更新:也许需要初始化 C++ 流以格式化数字,并且在 Python 中加载共享库时不会发生初始化?

我打电话

在通过 boost.python 导出到共享库的方法中。它不打印任何东西,但如果我这样做

有用。

这很重要,因为我想这样做:

我通过这样做暴露了这一点:

但是当我str在伯努利对象上调用python中的方法时,我什么也得不到。我怀疑更简单的 cout 问题是相关的。

0 投票
1 回答
370 浏览

python - 在 Mac 上使用 C++ 流序列化数字会导致 boost.python 崩溃

我认为我的链接有问题(我在 Mac 上运行,并且不得不将库更改为 MODULE?)。这是我所拥有的:

CMakeLists.txt

教程.cpp

一个.py

运行 a.py 会崩溃,除非ostr << 1 << "\n";被注释掉或替换为ostr << "1" << "\n";!

构建并运行:

堆栈跟踪(在做之后gdb --args python a.py):

0 投票
1 回答
3824 浏览

python - boost.python 参数类型不匹配(numpy.int64 -> int)

我遇到了这个问题:

似乎足够接近?

在做了一些替换之后,似乎中间的论点是问题所在。如何将 numpy.int64 转换为 int?

0 投票
1 回答
1339 浏览

c++ - 有什么方法可以使用 Boost.Python 将从 PIL 加载的图像传递给 C++ 函数?

我正在尝试制作一个包装器以在 Python 中使用 C++ 类,但我找不到一种方法来传递我已经加载到我的 Python 程序中的这个图像。

我可以将路径传递给图像并再次将其加载到 C++ 函数中,但这不是我想要的解决方案。

0 投票
1 回答
374 浏览

xcode - Xcode上boost python的链接器问题

我已经下载了 boost 1.45.0,在我的 mac 上安装了 Python 3.1.3。我成功地使用 Python 构建了 Boost。为此,我必须编辑我的“project-config.jam”并添加“使用 python:3.1:/Library/Frameworks/Python.framework/Versions/3.1;” 进去。

在这一点上,一切似乎都很好。

现在,当我尝试在 xcode 项目中使用此库时,出现链接错误:

未定义符号:“boost::python::objects::make_nurse_and_patient(_object*, _object*)”,引用自:_object* boost::python::with_custodian_and_ward_postcall<0ul, 1ul, boost::python::default_call_policies>:: postcall<_object*>(_object* const&, _object*) in libFluxCore.a(Python.o) "boost::python::objects::enum_base::enum_base(char const*, _object* ( )(void const ), void* (*)(_object*), void (*)(_object*, boost::python::converter::rvalue_from_python_stage1_data*), boost::python::type_info, char const*)”,引用自:沙箱: libFluxCore.a(Python.o) 中的 :BindComponentState()

还有更多...

路径和库在我的项目中设置得很好。

有人知道会发生什么吗?谢谢。

0 投票
1 回答
1266 浏览

python-3.x - Boost Python 示例失败了两次

只有我一个人尝试使用以下组合: boost_1_45_0, MSVC 10, Python31 吗?

我发现来自 boost (boost_1_45_0\libs\python\example\quickstart\embedding.cpp) 的基本示例既没有编译(我找到了如何修复它,见下文)也没有工作。编译时问题:

我发现正确的名称不是initembedded_hello而是init_module_embedded_hello。所以我的第一个问题是关于这个重命名我是对的吗?

第二个问题是SystemError: NULL result without error in PyObject_Call在导入我声明的模块时:

注释掉导入表明内部 python 的模块(如 io)工作正常。那么第二个问题导入有什么问题?

任何帮助,将不胜感激!

0 投票
1 回答
1729 浏览

c++ - Python对象到C++指针问题

这是我的第一篇文章 :)。我可以将 python 扩展对象转换为 C++ 指针,但我有一个问题。首先,我将向您展示我的代码,然后我将解释问题所在。

这是我的课:

增强包装:

Python代码(hello.py):

和主文件:

当我运行我的应用程序时,我可以在屏幕上看到“这是一个 Hello World !!!” 正如我所料。那么,有什么问题???假设我将 python 代码更改为:

然后,当我再次运行我的应用程序时,它崩溃了,因为我在该行中遇到了一个错误:

因为base是NULL。

更准确地说,错误是“访问冲突读取位置 0xblablabla”。当我调试时,调试器在函数处停止(我认为是 Boost 或 Python 代码)

你怎么看???

0 投票
3 回答
2602 浏览

python - 复制 boost.python 对象

我有一些 boost python 类,我在 python 中实例化它们。我想复制它们。所以,如果我有

我想要做

但是如果我不知道 p 的类型怎么办?我试图这样做:

但是python说它不能腌制p。

将 clone() 函数添加到伯努利的界面是我唯一的解决方案吗?或者我可以以某种方式自动生成该方法吗?可以使 copy.deepcopy 与 Boost.python 对象一起使用吗?