2013-08-22 6 views
1

내 프로그램에 세그먼트 결함이 있습니다.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

답변

1

가 나는 문제를 발견했다.

내 다른 게시물을 참조하십시오 C++: linked library disappears and gives segfault during execution

내 라이브러리의 정의되지 않은 심볼이 있었다. 나는 그것을 정의하고 문제를 해결했습니다!

혼란은 내 프로그램이 tcl 래퍼 함수 (정의되지 않은 기호가 전혀 포함되지 않은) 중간에 충돌했습니다. 왜 그런지는 모르겠지만 그게 전부예요.

다른 사람들에게 도움이되기를 바랍니다!