나는 새 젠투 12.1(amd64, XFCE, qt 4.8.2) 설치에서 scribus를 작동시키려고 노력했지만 일반 사용자로 실행하면 프로그램이 시작되지 않습니다. 아래 제안과 추가 테스트 덕분에 .ICEauthority 문제로 범위를 좁혔고 파일을 이동하면(또는 Scribus를 루트로 시작하면 sho에 파일이 없음) 완벽하게 로드됩니다. 단, 이 파일은 로그인 시 자동으로 생성되므로 삭제할 수 없습니다.
나는 같은 결과로 이 ebuild를 시도했습니다:
- 안정적인 amd64(1.4.0-r2)
- amd64 불안정(1.4.1)
- 안정적인 i386(1.4.0-r2)
일부 strace 결과, 첫 번째 결과에 strace -eopen 및 전체 출력을 혼합했습니다.
사용자로서:
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/home/xxx/.ICEauthority", O_RDONLY) = 8
open("/home/xxx/.ICEauthority", O_RDONLY) = 8
open("/home/xxx/.ICEauthority", O_RDONLY) = 8
open("/home/xxx/.ICEauthority", O_RDONLY) = 8
open("/home/xxx/.scribus//prefs140.xml", O_RDONLY|O_CLOEXEC) = 8
open("/usr/share/scribus/translations/scribus.en_GB.qm", O_RDONLY|O_CLOEXEC) = 8
open("/etc/nsswitch.conf", O_RDONLY) = 8
open("/etc/ld.so.cache", O_RDONLY) = 8
open("/lib64/libnss_compat.so.2", O_RDONLY) = 8
open("/lib64/libnsl.so.1", O_RDONLY) = 8
open("/etc/ld.so.cache", O_RDONLY) = 8
open("/lib64/libnss_nis.so.2", O_RDONLY) = 8
open("/lib64/libnss_files.so.2", O_RDONLY) = 8
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 8
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 8
fcntl(8, F_GETFD) = 0x1 (flags FD_CLOEXEC)
lseek(8, 0, SEEK_CUR) = 0
fstat(8, {st_mode=S_IFREG|0644, st_size=1129, ...}) = 0
mmap(NULL, 1129, PROT_READ, MAP_SHARED, 8, 0) = 0x7f748c6bd000
lseek(8, 1129, SEEK_SET) = 1129
munmap(0x7f748c6bd000, 1129) = 0
close(8) = 0
write(7, "\1\f\1\0\7\0\0\0\1\0\0\0\0\0\0\0\6\0\0\0UserID\0\0\0\0\0\0"..., 64) = 64
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x7070415173} ---
rt_sigaction(SIGALRM, {SIG_DFL, [ALRM], SA_RESTORER|SA_RESTART, 0x7f7488617bc0}, {SIG_DFL, [], 0}, 8) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f748c6bd000
write(1, "Scribus Crash\n", 14) = 14
write(1, "-------------\n", 14) = 14
write(1, "Scribus crashes due to Signal #1"..., 34) = 34
루트로(첫 번째 파일과 동일, 그 이후는 다름):
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
Qt: Session management error: Authentication Rejected, reason : None of the authentication protocols specified are supported and host-based authentication failed
open("/root/.scribus//prefs140.xml", O_RDONLY|O_CLOEXEC) = 7
open("/usr/share/scribus/translations/scribus.en_GB.qm", O_RDONLY|O_CLOEXEC) = 7
open("/usr/share/scribus/icons/Splash.png", O_RDONLY|O_CLOEXEC) = 7
open("/etc/qt4/Trolltech.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib64/qt4/plugins/imageformats", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 8
open("/usr/lib64/qt4/plugins/imageformats/libqgif.so", O_RDONLY) = 8
open("/usr/lib64/qt4/plugins/imageformats/libqico.so", O_RDONLY) = 8
open("/usr/lib64/qt4/plugins/imageformats/libqjpeg.so", O_RDONLY) = 8
open("/usr/lib64/qt4/plugins/imageformats/libqmng.so", O_RDONLY) = 8
open("/etc/ld.so.cache", O_RDONLY) = 8
open("/usr/lib64/libmng.so.1", O_RDONLY) = 8
open("/usr/lib64/liblcms.so.1", O_RDONLY) = 8
open("/usr/lib64/qt4/plugins/imageformats/libqtiff.so", O_RDONLY) = 8
(-O2 없이 컴파일한 후) gdb를 통해 실행했습니다.
(gdb) run
Starting program: /usr/bin/scribus
[Thread debugging using libthread_db enabled]
Program received signal SIGSEGV, Segmentation fault.
0x0000000000e932c8 in typeinfo name for ScribusQApp ()
(gdb) backtrace
#0 0x0000000000e932c8 in typeinfo name for ScribusQApp ()
#1 0x00007ffff70c94bf in ?? () from /usr/lib64/qt4/libQtGui.so.4
#2 0x00007ffff70c9789 in ?? () from /usr/lib64/qt4/libQtGui.so.4
#3 0x00007ffff278b11e in _SmcProcessMessage () from /usr/lib64/libSM.so.6
#4 0x00007ffff257a9c3 in IceProcessMessages () from /usr/lib64/libICE.so.6
#5 0x00007ffff65b7de3 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib64/qt4/libQtCore.so.4
#6 0x00007ffff660338e in QSocketNotifier::activated(int) () from /usr/lib64/qt4/libQtCore.so.4
#7 0x00007ffff65bfaab in QSocketNotifier::event(QEvent*) () from /usr/lib64/qt4/libQtCore.so.4
#8 0x00007ffff704c8b4 in QApplicationPrivate::notify_helper(QObject*, QEvent*)
() from /usr/lib64/qt4/libQtGui.so.4
#9 0x00007ffff705136f in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/qt4/libQtGui.so.4
#10 0x00007ffff65a33ab in QCoreApplication::notifyInternal(QObject*, QEvent*)
() from /usr/lib64/qt4/libQtCore.so.4
#11 0x00007ffff65d0c18 in ?? () from /usr/lib64/qt4/libQtCore.so.4
#12 0x00007ffff29d6672 in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#13 0x00007ffff29d6e68 in ?? () from /usr/lib64/libglib-2.0.so.0
#14 0x00007ffff29d7041 in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#15 0x00007ffff65d12bf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/qt4/libQtCore.so.4
#16 0x00007ffff70edc7e in ?? () from /usr/lib64/qt4/libQtGui.so.4
#17 0x00007ffff65a722f in QCoreApplication::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/qt4/libQtCore.so.4
#18 0x0000000000c26285 in ScribusQApp::init() ()
#19 0x0000000000e04250 in mainApp(int, char**) ()
#20 0x0000000000e041f8 in main ()
나는 대개 항상 온라인에서 문제에 대한 해결책을 찾기 때문에 버그 보고서를 제출하는 습관이 없습니다. 그러나 이번에는 이 문제와 관련된 사례를 찾을 수 없는 것 같습니다.
그렇다면 scribus를 사용하여 버그 보고서를 제출하려면 어디서부터 시작해야 할까요? 여기에 제공된 추가 정보가 필요합니까?
어떤 조언이라도 대단히 감사하겠습니다.
최선을 다하고 시간을 내주셔서 감사합니다.
답변1
Scribus를 컴파일할 때 -no-rtti를 사용하셨나요? 역추적은 ScribusQApp에 대한 유형 정보를 찾을 수 없음을 의미합니다. Scribus는 RTTI에 의존하지 않으며 Qt도 그럴 것이라고 생각하지 않습니다. 그러나 /usr/lib64/qt4/libQtGui.so.4의 이름 없는 함수에서 오류가 발생합니다. 그래서 제가 제안하는 것은 Qt와 Scribus의 컴파일 설정을 확인하고 동일한 RTTI 구성을 사용하는지 확인하는 것입니다.
bugs.scribus.net에 버그를 신고하지 마세요. 이 버그는 Qt, GLIB 및 icewm을 포함하는 Scribus 함수에 대한 마지막 호출에서 17번의 호출에서 발생합니다. 이 경우 우리는 일반적으로 사람들에게 다른 창 관리자를 사용하라고 말합니다 :-)
/안드레아스, Scribus 개발자