내 프로그램에 세그먼트 결함이 있습니다.segfault는 tcl에 대해 SWIG 변환 코드를 사용합니다.
실제로 라이브러리를 C++로 작성하고 SWIG를 사용하여 tcl로 변환합니다.
는 세그먼트 폴트 여기서 발생
가return Tcl_NewIntObj(static_cast<int>(value));
값 = 0
gdb를 다시 추적 나타내고 다음 래퍼
(gdb) bt
#0 0x000054b6 in ??()
#1 0xb6650d5d in SWIG_From_long (value=0) at mntdisplay_wrap.cc:1712
#2 SWIG_From_int (value=0) at mntdisplay_wrap.cc:1722
#3 Testguimnt_Init (interp=0x9714e28) at mntdisplay_wrap.cc:3774
#4 0xb76748fe in Tcl_LoadObjCmd() from /opt/ActiveTcl-8.6/lib/libtcl8.6.so
#5 0xb75d02af in TclNREvalObjv() from /opt/ActiveTcl-8.6/lib/libtcl8.6.so
#6 0xb75d0859 in Tcl_EvalObjv() from /opt/ActiveTcl-8.6/lib/libtcl8.6.so
#7 0xb75d0d99 in TclEvalEx() from /opt/ActiveTcl-8.6/lib/libtcl8.6.so
#8 0xb7670045 in Tcl_FSEvalFileEx() from /opt/ActiveTcl-8.6/lib/libtcl8.6.so
#9 0xb767645f in Tcl_MainEx() from /opt/ActiveTcl-8.6/lib/libtcl8.6.so
#10 0x0804885c in main()
: 라인 1712 :
SWIGINTERNINLINE Tcl_Obj*
SWIG_From_long (long value)
{
if (((long) INT_MIN <= value) && (value <= (long) INT_MAX)) {
return Tcl_NewIntObj(static_cast<int>(value)); //1712
} else {
return Tcl_NewLongObj(value);
}
}
1722 :
SWIGINTERNINLINE Tcl_Obj *
SWIG_From_int (int value)
{
return SWIG_From_long (value); //1722
}
3774
: 당신이 어떤 생각을 가지고있는 경우 MESSAGE_NEW이 열거 형에 정의 0입니다
SWIG_Tcl_SetConstantObj(interp, "MESSAGE_NEW", SWIG_From_int(static_cast<int>(MESSAGE_NEW)));
은, 저를 도와주세요하십시오. 고맙습니다!
편집 :
나는 문제의 원인을 발견 : 그것이 연결 오류입니다.
나는이 문제에 대한 새 스레드를 생성 :C++: linked library disappears and gives segfault during execution