我需要帮助理解嵌入式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;
}
我的研究让我here。我确定我的python安装(2.6.5)编译为使用msvcr90.dll
,嵌入程序使用msvcr100.dll
。
引起我注意的第一件事是Py_GetPythonHome()
肯定会检查环境变量,这是在单个应用程序中使用多个MS C运行时的标记问题之一。但是根据MSDN示例,我应该只期望环境变量值不同步,而不是导致访问冲突。
请帮助我理解!