问题标签 [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.
c++ - 在 Linux 中将 boost-python 与 C++ 一起使用
我的开发商店已经组装了一个相当有用的基于 Python 的测试套件,我们想用它来测试一些基于 Linux 的 C++ 代码。我们已经得到了他们与 Boost 一起发布的测试项目来编译(在目录中输入“bjam”并且它可以工作),但是我们的实际项目存在问题。
从源代码(v1.35.0)构建boost库和bjam,当我运行bjam时,我在bin/gcc-4.1.2/debug目录中得到一个.so。我运行 python 和“import”,我得到: ImportError: libboost_python-gcc41-d-1_35.so.1.35.0
: cannot open shared object file: No such file or directory
查看库目录,我有以下内容:
libboost_python-gcc41-mt-1_35.so
libboost_python-gcc41-mt-1_35.so.1.35.0
libboost_python-gcc41-mt.so
显然我需要 -d 而不是 -mt 库,或者指向 -mt 库而不是 -d,但我不知道如何让我的 Jamroot 文件做到这一点。
当我安装 Debian Etch 的库版本时,我得到“/usr/include 中没有 Jamfile” - 并且有一个 debian 错误说他们遗漏了系统级 jamfile。
我更有希望让它从源头工作,所以如果有人有任何解决图书馆问题的建议,我想听听他们的意见。
对答案 1 的回应:感谢您的提示。那么,你知道我将如何让它使用 MT 库吗?这似乎是 bjam 或我正在使用的 Jamfile 的问题,我认为我处于调试模式,即使我找不到任何标志。虽然我知道如何在对 GCC 的调用中包含特定库,但我看不到从 Boost 端配置它的方法。
c++ - CPP 中嵌入的 Python:如何将数据返回给 CPP
在从事 C++ 项目时,我一直在寻找第三方库来处理不是我核心业务的东西。我找到了一个非常好的库,完全符合需要,但它是用 Python 编写的。我决定尝试使用 Boost.Python 库在 C++ 中嵌入 Python 代码。
C++ 代码如下所示:
Python 代码的(非常)简化版本如下所示:
现在的问题是:“MyFunc”执行得很好,我可以看到“结果”的打印。我不能做的是从 C++ 代码中读取“结果”。extract 命令永远不会在任何命名空间中找到“结果”。我尝试将“结果”定义为全局,我什至尝试返回一个元组,但我无法让它工作。
c++ - 如何创建派生自抽象 C++ 类的类的 python 对象实例?
这是我的代码:
我想从 c++ 抽象类派生 python 类,然后将此对象传递回 c++。我应该如何做到这一点而不会崩溃?
c++ - 如何在 boost::python 嵌入式 python 代码中导入模块?
我正在使用 boost::python 将一些 python 代码嵌入到应用程序中。我能够正确评估打印语句或其他表达式,但是当我尝试导入模块时,它没有导入并且应用程序正在退出。此外,嵌入式代码中的 globals() 函数调用也会产生运行时错误。
在这里,我尝试使用 boost 导入函数导入 urllib2,这可以正常编译和运行,但是使用以下 exec 语句,它会出错。
或者当我删除 boost 导入功能并从嵌入式代码中进行导入时,它会给出错误。我尝试使用 try: except: block 但这也不起作用。这是因为 C++ 应用程序无法找到 urllib2 py 模块的位置还是什么?有没有办法在尝试导入之前设置模块的路径?
这只是为内部使用而构建的,因此可以接受一些路径的硬编码。
编辑:更多信息:
这就是发生的事情。我尝试了.. catch 并在出现异常时调用 PyErr_Print() ,并且在有模块导入甚至函数调用时一直将其视为错误。错误信息:
谁能想到任何理由?
python - 如何在 Python 中为包装的 C++ 函数传递指向数组的指针
我是 C++/Python 混合语言编程的新手,对 Python/C API 不太了解。我刚开始使用 Boost.Python 为 Python 包装一个 C++ 库。我坚持包装一个将指向数组的指针作为参数的函数。以下 (2nd ctor) 是它在 C++ 中的原型。
通过在 boost::python 中这样包装它,我做得对吗?
请注意,它已成功编译和链接,但我不知道如何在 Python 中调用它。我的天真尝试如下失败。
我的第二个问题是我还需要包装析构函数吗?请说明在某些情况下是否需要这样做,但并非总是如此。
c++ - Boost.Python 和 Python 异常
如何让 boost.python 代码知道 python 异常?
例如,
如果我将它导出到 python,它不会在 Ctrl-C 上中断。我认为其他例外不会以这种方式起作用。
这是一个玩具示例。我真正的问题是我有一个可能需要数小时才能计算的 C 函数。我想打断它,例如,如果它需要更多的时间。但我不想杀死python实例,在函数内被调用。
提前致谢。
c++ - 如何在 Boost::Python 中向 C++ 类型添加自定义隐式转换?
在我的 C++ 代码中,我有一个 Foo 类,其中有许多将 Bar 类型变量作为参数的方法:
Bar 有许多构造函数,它们从许多常见类型(例如 int、std::string、float 等)创建新对象:
我用 Boost::Python 包装了它,现在我可以直接使用 Python 文字调用我的 Foo 方法,因为它们被隐式转换为 Bar 对象。
现在,我还希望能够使用其他 Python 类型,例如元组,如下所示:
但我不想触碰最初的 Bar 定义,也不想用 Boost::Python 的东西污染我的 C++ 库。我想在我的绑定代码中编写一个包装函数,但我不明白这是否可行,以及这样做的正确方法是什么。
换句话说:我可以注册一个工厂函数以用作 Python 中的自动转换吗?
c++ - 如何使用 Boost.Python 重载运算符
我正在尝试使用 Boost.Python 重载 C++ 类的运算符。
据此,我正在以正确的方式进行操作......但我有一堆编译器错误。
这是我试图查明问题的一个简单示例:
以下是编译器错误:
我在这里错过了什么吗?
谢谢
python - 从 boost python 返回一个 c++ 数组(指针)
我目前正在为我正在开发的 c++ 库编写 python 绑定。该库读取一些二进制文件格式,读取速度非常重要。在优化库以提高速度时,我注意到 std::vector (在我正在阅读的实例中使用)占用了大量的处理时间,所以我用 new[] 分配的简单数组替换了那些(无论这是好的/明智的做法可能是另一个问题)。
现在我遇到了如何让 python 访问这些数组的问题。boost::python 中似乎没有内置解决方案(我至少找不到一个)。
示例代码来说明情况:
我想我可以使用一个包装函数,只要 python 想要访问它们,就可以从数组中构造一个 boost::python::list 。由于我对 boost::python 还很陌生,所以我想在开始破解之前,我应该询问是否有任何好的、标准或内置的解决方案来解决这个问题。
那么,你会如何推荐使用 boost::python 包装数组呢Instance
?data
c++ - 如何获取 Python 异常文本
我想在我的 C++ 应用程序中嵌入 python。我正在使用 Boost 库 - 很棒的工具。但我有一个问题。
如果 python 函数抛出异常,我想捕获它并在我的应用程序中打印错误,或者获取一些详细信息,例如导致错误的 python 脚本中的行号。
我该怎么做?我在 Python API 或 Boost 中找不到任何函数来获取详细的异常信息。
PyErr_Print() 只是将错误文本打印到 stderr 并清除错误,因此无法解决