Наше приложение имеет встроенный в него tcl
и с использованием starkit
; tk
статически связан с ним.встроенный Tk - зависает на ctrl + d
Когда я запускаю приложение, появляется gui
и отвечает на все клавиши, но когда я ударил ctrl+d
, чтобы завершить его зависание. Я дал задний след повесить в конце сообщения.
Прежде всего позвольте мне описать, как мы встраиваем Tcl/Tk
в наше приложение.
#--------------------------------------------------------------
# (*) install ActiveTcl
# we need starkit and ActiveTcl tclsh is batteries included
#--------------------------------------------------------------
% tar -xzf ActiveTcl8.5.8.1.291945-linux-x86_64-threaded.tar.gz
% cd ActiveTcl8.5.8.1.291945-linux-x86_64-threaded
# specify /a/b/tcltk8.5.8/linux26_x86_64 as install dir in gui
% ./install.sh
Нам нужно tk
без истинных шрифтов типа, так как это было crashing приложение. Для того, чтобы установить tk
из источников, мы должны tcl
компилируется: (. Я не знаю, как собрать tk
с --with-tcl
указывая на Актив-Tcl каталог Если есть возможность, пожалуйста, дайте мне знать)
#--------------------------------------------------------------
# (*) install tcl from sources
#--------------------------------------------------------------
% tar -xzf tcl8.5.8-src.tar.gz
% cd tcl8.5.8/unix
% ./configure --prefix=/a/b/tcltk8.5.8/linux26_x86_64 \
--enable-shared=no \
--enable-threads
% gmake
NO gmake install
для этого tcl
так как нам нужно сохранить tclsh ActiveTcl. Затем установите tk
.
#--------------------------------------------------------------
# (*) install tk from sources
# need to disable xft (true type font) set --disable-xft
#--------------------------------------------------------------
% tar -xzf tk8.5.8-src.tar.gz
% cd tk8.5.8/unix
% ./configure --prefix=/a/b/tcltk8.5.8/linux26_x86_64 \
--enable-shared=no \
--with-tcl=/a/b/tcltk8.5.8/src/tcl8.5.8/unix \
--disable-xft \
--enable-threads
% gmake
% gmake install
Теперь я бег моего приложения с помощью gdb
:
% gdb rs
% r -gui
Я ударил ctrl+d
, который вызывает висит, и это дает следующий задний след. Может ли кто-нибудь помочь мне исправить эту проблему?
Program received signal SIGINT, Interrupt.
[Switching to Thread 182897358720 (LWP 9535)]
0x0000003739608b3a in [email protected]@GLIBC_2.3.2()
from /lib64/tls/libpthread.so.0
(gdb) bt
#0 0x0000003739608b3a in [email protected]@GLIBC_2.3.2()
from /lib64/tls/libpthread.so.0
#1 0x0000000001833e22 in Tcl_ConditionWait()
#2 0x0000000001834d41 in Tcl_WaitForEvent()
#3 0x00000000017fec68 in Tcl_DoOneEvent()
#4 0x00000000017cb4ad in Tcl_VwaitObjCmd()
#5 0x000000000178b6ec in TclEvalObjvInternal()
#6 0x00000000017cd08d in TclExecuteByteCode()
#7 0x00000000017d5798 in TclCompEvalObj()
#8 0x000000000178d6ac in TclEvalObjEx()
#9 0x00000000017939c4 in Tcl_CatchObjCmd()
#10 0x000000000178b6ec in TclEvalObjvInternal()
#11 0x00000000017cd08d in TclExecuteByteCode()
#12 0x00000000017d5a84 in Tcl_ExprObj()
#13 0x000000000178c3e3 in Tcl_ExprBooleanObj()
#14 0x0000000001796704 in Tcl_IfObjCmd()
#15 0x000000000178b6ec in TclEvalObjvInternal()
#16 0x000000000178cee6 in TclEvalEx()
#17 0x000000000178d616 in Tcl_EvalEx()
#18 0x00000000017f1be9 in Tcl_FSEvalFileEx()
#19 0x000000000179c385 in Tcl_SourceObjCmd()
#20 0x000000000178b6ec in TclEvalObjvInternal()
#21 0x000000000178cee6 in TclEvalEx()
---Type <return> to continue, or q <return> to quit---
#22 0x000000000178d616 in Tcl_EvalEx()
#23 0x000000000178d9d8 in TclEvalObjEx()
#24 0x000000000180d45f in Tcl_UplevelObjCmd()
#25 0x000000000178b6ec in TclEvalObjvInternal()
#26 0x00000000017cd08d in TclExecuteByteCode()
#27 0x000000000180e4cd in TclObjInterpProcCore()
#28 0x000000000178b6ec in TclEvalObjvInternal()
#29 0x000000000178cee6 in TclEvalEx()
#30 0x000000000178d616 in Tcl_EvalEx()
#31 0x000000000178dacd in Tcl_Eval()
#32 0x00000000008f26aa in xrAppPlatformInit (interp=0x211a410)
at xrAppPlatform.c:430
#33 0x00000000017f69ca in Tcl_Main()
#34 0x00000000008f2153 in xrMain (argc=3, argv=0x20fe880)
at xrAppPlatform.c:177
#35 0x00000000008f1092 in main (argc=2, argv=0x7fbfffe718) at main.cpp:213