1

プログラムでセグメンテーション違反が発生しています。

実際、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:

SWIG_Tcl_SetConstantObj(interp, "MESSAGE_NEW", SWIG_From_int(static_cast< int >(MESSAGE_NEW)));

ここで、MESSAGE_NEW は列挙型で定義され、0 です。

よろしければ、お知恵を貸してください。ありがとうございました!

編集:

問題の原因がわかりました。リンク エラーです。

この問題について新しいスレッドを作成しました。

C++: リンクされたライブラリが消え、実行中に segfault が発生する

4

1 に答える 1