PyObject_Print崩溃的原因
Why is PyObject_Print crashing?
我一直在玩Python 3.3 C-API,看看我是否可以在计划中的即将到来的项目中使用它,但几乎马上就遇到了问题。
即使是这样简单的代码也会以0xc0000005作为返回崩溃:
#include <Python.h>
#include <cstdio>
int main(){
Py_Initialize();
Py_IncRef(Py_True); //just in case?
PyObject_Print(Py_True,stdout,Py_PRINT_RAW);
Py_DecRef(Py_True);
Py_Finalize();
return 0;
}
测试显示PyObject_Print正在生成崩溃。这个代码和/或我的设置有什么问题?
这很可能是由于不正确的链接造成的。当代码中的File*
与链接的python库中的File*
不同时,崩溃很常见。当使用不同运行时的不同编译器或不同版本的编译器编译了所喜欢的库时,就会发生这种情况。
当我从Pyhton 2.x->3.x 移动一个C模块时,PyObject_Print()崩溃了
首先,检查C模块中的MSVS版本(MSC)是否与Python报告的版本匹配。
例如,运行python.exe报告:Python 3.3.2(v3.3.2:d047928ae3f6,2013年5月16日,00:03:43)[MSC v.1600 32位(英特尔)]在win32 上
在模块的init函数中添加fprintf:
fprintf(stderr,"C-MSC_VER%d\n",_MSC_VER);
给予:
C-MSC_VER 1600
其次,检查您的命令行选项。同样,我的简单测试模块的命令是:
cl.exe/Fosmod.obj/c/I"%INCLUDE%"/I c:\python33\INCLUDE smod.clink.exe.dll/out:smod.pyd smod.obj/LIBPATH:c:\python33\libs
这些导致我的模块在PyObject_Print()中崩溃!
快速阅读"cl"命令行选项,我添加了"/MD":
cl.exe/MD/Fosmod.obj/c/I"%INCLUDE%"/I c:\python33\INCLUDE smod.clink.exe.dll/out:smod.pyd smod.obj/LIBPATH:c:\python33\libs
修复!
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- 将方法转换为调用该方法的成员函子对象会导致崩溃