Windows上的Boost Python在导入("__main__")时崩溃

3 投票
1 回答
506 浏览
提问于 2025-04-18 14:58

我正在写一个使用 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__");

撰写回答