在 Windows 上嵌入 Python 时出现访问冲突
我需要帮助理解为什么嵌入式 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论