Tk - ошибки при использовании виджета (кнопка, текст) - PullRequest
0 голосов
/ 30 марта 2011

Я скомпилировал 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 ()

Я думаю, что есть какая-то проблема со шрифтами.Любая идея, чтобы это исправить?

РЕДАКТИРОВАТЬ 1 (01 апреля 2011 г.):

% 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)

РЕДАКТИРОВАТЬ 2 (04 апреля 2011 г.)

% 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

1 Ответ

1 голос
/ 31 марта 2011

Вы задали этот вопрос на comp.lang.tcl , и обходной путь должен указать --disable-xft при настройке Tk.

Я подозреваю, что настоящая причина - это невозможность связать синтаксический анализатор XML, который, как сообщалось, является потенциальной проблемой в некоторых последних версиях Linux из-за изменения системы в способе обработки транзитивных зависимостей. (Я забыл, какой поставщик несет ответственность; я не уделял так много внимания обсуждению с разработчиками, где это недавно было обсуждено.) Можете ли вы сообщить, что ldd сообщает для библиотеки Tk (без обходного пути) и какую именно ОС вы используете? строишь на? Кроме того, какую именно версию Tk вы пытаетесь создать? Также обратите внимание, что гораздо полезнее использовать параметр конфигурации --enable-symbols для Tcl и Tk при поиске проблемы, так как это позволяет получить лучшую информацию в трассировке стека.

...