在 Windows 上嵌入 Python 时出现访问冲突

发布于 2024-11-27 21:54:09 字数 1027 浏览 0 评论 0原文

我需要帮助理解为什么嵌入式 Python 在 Windows 上这个极其简单的测试用例中崩溃。

这很好用:

#ifdef _DEBUG
#undef _DEBUG
#include <Python.h>
#define _DEBUG
#endif

#include <iostream>

int main()
{
    Py_Initialize();
    std::cout << "Hello world!" << std::endl;
    PyRun_SimpleString("print(\"Hello world!\")");
    return 0;
}

这会因访问冲突而崩溃:

#ifdef _DEBUG
#undef _DEBUG
#include <Python.h>
#define _DEBUG
#endif

#include <iostream>

int main()
{
    Py_Initialize();
    std::cout << "Hello world!" << std::endl;
    std::cout << Py_GetPythonHome() << std::endl;
    return 0;
}

我的研究引导我这里。我确定我的 python 安装 (2.6.5) 已编译为使用 msvcr90.dll 并且嵌入程序使用 msvcr100.dll

引起我注意的第一件事是 Py_GetPythonHome() 肯定会检查环境变量,这是在单个应用程序中使用多个 MSC 运行时的标记问题之一。但是根据 MSDN 示例,我应该只期望环境变量值不同步,而不会导致访问冲突。

请帮我理解一下!

I need help understanding why embedded Python is crashing in this extremely simple test case on Windows.

This works great:

#ifdef _DEBUG
#undef _DEBUG
#include <Python.h>
#define _DEBUG
#endif

#include <iostream>

int main()
{
    Py_Initialize();
    std::cout << "Hello world!" << std::endl;
    PyRun_SimpleString("print(\"Hello world!\")");
    return 0;
}

This crashes with an access violation:

#ifdef _DEBUG
#undef _DEBUG
#include <Python.h>
#define _DEBUG
#endif

#include <iostream>

int main()
{
    Py_Initialize();
    std::cout << "Hello world!" << std::endl;
    std::cout << Py_GetPythonHome() << std::endl;
    return 0;
}

My research has led me here. I determined that my python installation (2.6.5) is compiled to use msvcr90.dll and the embedding program uses msvcr100.dll.

The first thing that grabbed my attention was that Py_GetPythonHome() surely checks environment variables, one of the flagged problems of having multiple MS C runtimes used in a single application. However according to the MSDN example, I should only expect the environment variable values to be out of synch, not to cause an access violation.

Please help me understand!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文