我对Cython有一个非常奇怪的问题。
我已经在Mac OS和Arch Linux上测试了我的软件包而没有失败。
现在,当我在CentOS上测试我的软件包时,我遇到了分段错误
这里是gdb跟踪
Program received signal SIGSEGV, Segmentation fault.
__Pyx_GetItemInt_Fast (o=0x2aaac56d3b90, i=2, boundscheck=0, wraparound=0, is_list=0) at myprog/Snv.c:10678
10678 myprog/Snv.c: No such file or directory.
(gdb) where
#0 __Pyx_GetItemInt_Fast (o=0x2aaac56d3b90, i=2, boundscheck=0, wraparound=0, is_list=0) at myprog/Snv.c:10678
#1 0x00002aaabe7a8b76 in __pyx_f_3sv2_3Snv_tokenize_vcf (__pyx_v_Bam=<optimized out>, __pyx_v_Variant=<optimized out>, __pyx_optional_args=<optimized out>) at myprog/Snv.c:6685
#2 0x00002aaabe7ac6a2 in __pyx_pf_3sv2_3Snv_6c_preprocess_snv (__pyx_self=<optimized out>, __pyx_v_masked=<optimized out>, __pyx_v_Bam=<optimized out>) at myprog/Snv.c:5374
#3 __pyx_pw_3sv2_3Snv_7c_preprocess_snv (__pyx_self=0x2aaac56d3b90, __pyx_args=0x2aaaab221870, __pyx_kwds=0x2aaab712d690 <__pyx_pw_5pysam_9libctabix_13TabixIterator_5__next__>) at myprog/Snv.c:4916
#4 0x00002aaabe7b7ca1 in __Pyx_PyObject_Call (kw=<optimized out>, arg=<optimized out>, func=<optimized out>) at myprog/Snv.c:10555
#5 __pyx_pf_3sv2_3Snv_2preprocess_snv (__pyx_self=<optimized out>, __pyx_v_masked=<optimized out>, __pyx_v_Bam=<optimized out>) at myprog/Snv.c:2994
#6 __pyx_pw_3sv2_3Snv_3preprocess_snv (__pyx_self=0x2aaac56d3b90, __pyx_args=0x2aaabe4f2f38, __pyx_kwds=0x2aaaaab41240 <PyCFunction_Call>) at myprog/Snv.c:2935
#7 0x00002aaabe579680 in __Pyx_PyObject_Call (kw=0x0, arg=<optimized out>, func=0x2aaabe4f2d40) at myprog/Preprocess.c:9226
#8 __pyx_f_3sv2_10Preprocess_sv2_preprocess (__pyx_v_Bam=0x2aaac56d3dd0, __pyx_v_ofh=0x2aaac56d22d0, __pyx_v_seed=0x619558, __pyx_v_gen=0x2aaaab23b150, __pyx_v_tmp_dir=0x2aaac5ce6bb8) at myprog/Preprocess.c:3527
#9 0x00002aaabe591307 in __pyx_pf_3sv2_10Preprocess_preprocess (__pyx_self=<optimized out>, __pyx_v_tmp_dir=<optimized out>, __pyx_v_gen=<optimized out>, __pyx_v_seed=<optimized out>,
__pyx_v_ofh=<optimized out>, __pyx_v_Bam=<optimized out>) at myprog/Preprocess.c:2837
#10 __pyx_pw_3sv2_10Preprocess_1preprocess (__pyx_self=0x2aaac56d3b90, __pyx_args=0x2aaac55fc1e0, __pyx_kwds=0x2aaaaae61270 <_Py_NoneStruct>) at myprog/Preprocess.c:2700
#11 0x00002aaaaabab1e5 in call_function (oparg=<optimized out>, pp_stack=0x7fffffffb908) at Python/ceval.c:4352
#12 PyEval_EvalFrameEx (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:2989
#13 0x00002aaaaabac345 in fast_function (nk=<optimized out>, na=<optimized out>, n=<optimized out>, pp_stack=0x7fffffffba78, func=0x2aaac56ccc08) at Python/ceval.c:4437
#14 call_function (oparg=<optimized out>, pp_stack=0x7fffffffba78) at Python/ceval.c:4372
#15 PyEval_EvalFrameEx (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:2989
#16 0x00002aaaaabacc3e in PyEval_EvalCodeEx (co=0x2aaaab222a30, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=0, kws=0x0, kwcount=0, defs=0x0, defcount=0, closure=0x0)
at Python/ceval.c:3584
#17 0x00002aaaaabacd52 in PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at Python/ceval.c:669
#18 0x00002aaaaabcd450 in run_mod (arena=0x617e10, flags=0x7fffffffbd70, locals=0x2aaaaaf1b168, globals=0x2aaaaaf1b168, filename=<optimized out>, mod=0x6aaa70) at Python/pythonrun.c:1376
#19 PyRun_FileExFlags (fp=0x638fc0, filename=<optimized out>, start=<optimized out>, globals=0x2aaaaaf1b168, locals=0x2aaaaaf1b168, closeit=1, flags=0x7fffffffbd70) at Python/pythonrun.c:1362
#20 0x00002aaaaabcd62f in PyRun_SimpleFileExFlags (fp=0x638fc0, filename=0x7fffffffc47f "/home/me/anaconda/bin/myprog", closeit=1, flags=0x7fffffffbd70) at Python/pythonrun.c:948
#21 0x00002aaaaabe2fd4 in Py_Main (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:645
#22 0x00000033b881ed1d in __libc_start_main () from /lib64/libc.so.6
#23 0x0000000000400729 in _start ()
$ head -n 10678 /home/me/myprog_dist/versions/1.4.0/myprog-1.4.0/myprog/Snv.c | tail -n 1
PyThreadState *tstate = __Pyx_PyThreadState_Current;
我正在运行python Python 2.7.13 :: Anaconda custom(64位)
我不知道为什么会发生这种SegFault。这个包适用于Arch Linux和MacOS。那么为什么CentOS失败呢?