Dependencies Tk-使用小部件时出现的错误(按钮、文本)

Dependencies Tk-使用小部件时出现的错误(按钮、文本),dependencies,tk,fontconfig,Dependencies,Tk,Fontconfig,我已经将Tcl/Tk编译到我的应用程序中。当我打开我的应用程序时,我会得到一个窗口(由于Tk_init),我可以对其进行操作: > wm title . "mysh" > wm geometry . 300x300 但当我尝试按钮或任何其他小部件时,它会出现故障 > button .b Segmentation fault 我在gdb中加载了这个,并进行了回溯 Program received signal SIGSEGV, Segmentation fault. [S

我已经将Tcl/Tk编译到我的应用程序中。当我打开我的应用程序时,我会得到一个窗口(由于Tk_init),我可以对其进行操作:

> wm title . "mysh"
> wm geometry . 300x300
但当我尝试按钮或任何其他小部件时,它会出现故障

> button .b
Segmentation fault
我在gdb中加载了这个,并进行了回溯

Program received signal SIGSEGV, Segmentation fault.
  [Switching to Thread 182897358752 (LWP 14112)]
0x0000000100000000 in ?? ()
  (gdb) bt
#0  0x0000000100000000 in ?? ()
#1  0x0000000000fe3004 in XML_ParseBuffer ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#2  0x0000000000fa4955 in FcConfigParseAndLoad ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#3  0x0000000000f9d3cc in FcInitLoadConfig ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#4  0x0000000000f9d416 in FcInitLoadConfigAndFonts ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#5  0x0000000000f9d5bd in FcInit ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#6  0x0000000000f97015 in FcConfigGetCurrent ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#7  0x0000000000f98906 in FcConfigSubstituteWithPat ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#8  0x0000000000edf28c in InitFont ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#9  0x0000000000edf52f in TkpGetFontFromAttributes ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#10 0x0000000000f00c4c in Tk_AllocFontFromObj ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#11 0x0000000000efa4d2 in DoObjConfig ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#12 0x0000000000efaa3a in Tk_InitOptions ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#13 0x0000000000e70db2 in ButtonCreate ()
  at <local>/software/gcc_64/include/c++/3.3.6/bits/stl_pair.h:83
#14 0x0000000001588581 in TclEvalObjvInternal ()
编辑2(2011年4月4日)


您在上提出了这个问题,解决方法是在配置Tk时指定
--禁用xft


我怀疑真正的原因是未能链接XML解析器,据报道,由于系统改变了可传递依赖项的处理方式,这在一些最新版本的Linux上是一个潜在问题。(我忘了是哪个供应商负责;我没有太注意最近讨论过的开发人员讨论。)您能报告Tk库的
ldd
报告(没有解决方法)以及您正在构建的确切操作系统吗?另外,您要针对哪个版本的Tk进行构建?还要注意的是,在跟踪问题时,使用
--启用符号
配置选项对Tcl和Tk更有帮助,因为这样可以在堆栈跟踪中获得更好的信息。

在文章中添加了
ldd
uname-a
信息。稍后,我将在启用
--enable symbols
的情况下发布堆栈跟踪。我使用
--enable symbols
进行编译,
gdb
中的
bt
提供了相同的信息。是否应该在
gdb
tcl/tk
编译中启用任何其他开关?@Anand:我实际上想知道是哪个供应商。红帽?苏西?Debian?@Anand:这确实是与临时链接相关的问题,RH最近关闭了临时链接。(非常感谢大家,RH!)IIRC,它缺少Xft和expat库(fontconfig依赖于它们,但Tk并不直接依赖它们),但我可能错了。我认为在8.5版本中已经做了一些工作来修复这个问题,但我知道自从我们发现这个问题以来,还没有发布过任何版本。可能值得提出一个bug:
% uname -a
Linux scdbuild04 2.6.9-67.ELsmp #1 SMP Fri Nov 16 12:49:06 EST 2007 x86_64 x86_64 x86_64 GNU/Linux

% ldd libtk8.5.so 
libX11.so.6 => /usr/X11R6/lib64/libX11.so.6 (0x0000002a957b7000)
libXss.so.1 => /usr/X11R6/lib64/libXss.so.1 (0x0000002a959b0000)
libXext.so.6 => /usr/X11R6/lib64/libXext.so.6 (0x0000002a95ab3000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000002a95bc5000)
libm.so.6 => /lib64/tls/libm.so.6 (0x0000002a95cc8000)
libc.so.6 => /lib64/tls/libc.so.6 (0x0000002a95e4e000)
/lib64/ld-linux-x86-64.so.2 (0x000000552aaaa000)
% cat /etc/*-release 
CentOS release 4.6 (Final)

% cat /proc/version
Linux version 2.6.9-67.ELsmp (mockbuild@builder10.centos.org) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-9)) #1 SMP Fri Nov 16 12:49:06 EST 2007