segfault使用SWIG转换的tcl代码
segfault using SWIG converted code for tcl
我的程序出现分段错误。
事实上,我用C++编写了一个库,并使用SWIG将其转换为tcl。
segfault发生在这里:
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
我发现了问题。
请参阅我的另一篇帖子:C++:链接库在执行时消失并给出segfault
我的图书馆有一个未定义的符号。我定义了它并解决了问题!
令人困惑的是,我的程序在tcl包装器函数的中间崩溃了(其中根本没有涉及我的未定义符号)。我真的不知道为什么,但就是这样。
希望它能帮助其他人!
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何在C++代码上使用 Tcl-C API
- TCL文件无法获取通过代码设置的环境变量
- 使用正在调用TCL脚本的CPP代码的GCC编译
- 获取在C++中实例化的TCL解释器中执行代码的行号
- C++ SWIG 生成的代码取决于 Tcl
- segfault使用SWIG转换的tcl代码
- 用户界面-C++/Tk如何执行通用tcl代码