Windows上的Boost Python在导入("__main__")时崩溃
我正在写一个使用 Boost Python 嵌入的程序。在 Linux Mint 上运行得很好,但在 Windows 上就麻烦了。我使用的是 MingW,所以我尝试按照这个网站上另一个问题的说明创建一个导入库。考虑到这些,我的程序编译和链接都没问题,Python 3.4 是动态链接的,而 Boost Python 是静态链接的。不过,我的程序崩溃了,我实在搞不清楚原因。我跟踪执行,发现它在 "import("main");" 这一行停下来了。
// My python extensions
PyImport_AppendInittab("OpenGL", PyInit_OpenGL);
PyImport_AppendInittab("glm", PyInit_glm);
PyImport_AppendInittab("glfw", PyInit_glfw);
cout << "Initializing Python... ";
Py_Initialize();
cout << "done\n";
using namespace boost::python;
main_module = import("__main__"); // < crashes at this line
main_namespace = main_module.attr("__dict__");
奇怪的是,我把 libpython34.a 从我的库搜索路径中移除后,程序仍然能正常构建,所以我猜问题可能不在 Python 本身,但我不知道该去哪里找问题。我无法获得关于发生错误的详细信息,因为程序直接退出了,什么也没打印出来,我还设置了异常来捕捉 error_already_set 的错误 : / 如果你有建议或者其他任何想法,请分享一下,谢谢!
编辑:我构建了这个简单的嵌入式 Python Hello World 程序
PyImport_ImportModule("__main__");
PyRun_SimpleString("from time import time,ctime\n"
"print('Today is',ctime(time())\n)");
Py_Finalize();
这个运行得非常顺利。另一方面:
boost::python::import("__main__");
却导致了无声崩溃。
1 个回答
0
我添加了 Py_Initialize,这样崩溃的问题就解决了。
Py_Initialize();
boost::python::object main = boost::python::import("__main__");