【发布时间】:2013-11-05 17:10:49
【问题描述】:
我正在尝试在我的程序中实现一些 Python 的东西,我决定使用 Boost::Python,所以我按照说明编译它,使用 bjam,使用 mingw/gcc,获取 dll 和 .a 文件
我为此使用 Code::Blocks,所以我将 dll 放在我的项目的工作目录中,我使用的其余 dll 都在其中,并决定运行boost::python::exec("b = 5");
瞬间我就崩溃了。想法?
#include <boost/python.hpp>
float func(int a)
{
return a*a-0.5;
}
BOOST_PYTHON_MODULE(test_module)
{
using namespace boost::python;
def("func", func);
}
int main()
{
//Try one
boost::python::exec("b = 5");
//Crash
//Try two
Py_Initialize();
boost::python::exec("b = 5");
//Works fine
//Try three
Py_Initialize();
boost::python::exec("import test_module");
//Throws boost::python::error_already_set and crashes
/*
Something along the lines of
boost::python::exec("import test_module\n"
"var = test_module.func( 3 )\n");
*/
}
在我的项目的构建选项部分下,我添加了 libboost_python3-mgw48-d-1_54.dll 和 libpython33 以进行链接以便编译。
想法?
【问题讨论】:
-
您能否详细说明这一点,或者最好提供sscce?你想在哪里调用
boost::python::exec()? -
@TannerSansbury 在 int main() 中。它实际上是其中的第一行,程序在那一点上立即崩溃
-
嵌入 Python 时,解释器在调用 Boost.Python 之前需要初始化 (
Py_Initialize())。您能否提供最少的 C++ 代码以及您的总体目标?目前尚不清楚正在尝试什么。你想嵌入 Python 吗?test_module扩展的相关性是什么? -
@TannerSansbury 我知道,我注意到在尝试使用 Python 的 C API 时,我失败了。我正在尝试嵌入 Python 并允许它使用上面的函数,这就是我根据 boost 的教程公开它的原因。请允许我使用 pastebin 以免使此页面混乱,请查看 pastebin.com/FHPmry9u
-
sscce 并不总是混乱的。在尝试调试代码时,它可能变得很有必要。最初发布的问题没有提到一些会使回答变得非常困难的关键细节。如果需要,请随时恢复编辑,但完整的问题可以避免链接失效,并且可能对未来的用户有所帮助。
标签: c++ python boost boost-python python-3.3