konqueror embedded crash
우선 PC 환경에서 qvfb를 사용해서 QTE 환경으로 konqueror embedded
을 테스트 해보고있습니다.
===
CentOS 3.7,
qt-x11-free-3.3.7.tar.gz
qt-embedded-free-3.3.7.tar.gz
konqueror3-embedded-0.2.20061021.tar.bz2
===
QVFB 에서 실행은 잘 되는데
몇몇 page 에서 launcher: error sending launcherSlavePidCmd 에러 나면서 죽습니다.
http://www.korone.net/bbs/board.php?bo_table=qt_qna&wr_id=8993#c_8998
요글에 뱅래 님이 비슷한 post 를 올렸는데 저는 javascript 없는 page 의 경우에도 위 메시지를 출력하며 죽는 경우가 있습니다. 저는 Preferences -> Eanble Javascript 를 체크 하고 있지 않습니다. 물론 javascript 있는 사이트에서 Enable javascript 하면 100% 죽고요
또 한글이 안나오는데, 한글을 나오게 하려면 어떻게 해야 하나요? 너무 막연한가.. 이것은 저도 찾아보고 해결하면 올리겠습니다.
수고하세요
참고로 konqueror 컴파일 했던 방법을 같이 올립니다. PC가 64bit machine 이라 약간 삽질을 했습니다.
QTX11, QTE 설치법
http://skkulug.skku.ac.kr/chan/6 참조 4.qvfb 실행 및 테스트 까지 진행
링크에 나온 버전 대신 3.3.7 버전 사용
konqueror 컴파일 방법
* cd konq3
* ./configure --enable-embedded --enable-qt-embedded
* make
trouble shoot
QT
* /usr/bin/ld: skipping incompatible /usr/X11R6/lib/libXmu.a when searching for -lXmu
o configure 시에 -platform linux-g++-64 추가함.
* Semop lock failure 메시지 출력
o /tmpqtembedded-user/QtEmbedded-0 삭제함.
* Can't attach shared memory
o ./qvfb -width 240 -height 320 -depth 16 으로 실행함.
konqueror
(1) Can't locate object method "path" via package "Autom4te::Request" at /usr/bin/autom4te line 81.
autoheader: /usr/bin/autom4te failed with exit status: 1
(해결책)
up-to-date autoconf, http://www.linuxquestions.org/questions/showthread.php?t=177352
up-to-date m4 ftp://ftp.gnu.org/gnu/m4/m4-1.4.7.tar.gz (autoconf 최신 버전이 1.4.7 버전 m4 요구함)
* autoconf install 시에 Request.pm 복사 안되서 수동 복사
* cp Request.pm usr/share/autoconf/Autom4te
실행방법
# qvfb 실행
* ./qvfb -width 640 -height 480 -depth 16
# konqueror 실행
* cd konq-embeded/src
* ./konqueror -qws
자답 ㅠㅠ
자가 답변을 하면 konqueror 컴파일 시 -fno-rtti 옵션이 추가되어 있는데, 이 옵션은 dynamic_cast를 사용하지 않을 시 코드 사이즈를 줄여 주는데, 실제로 konqueror 소스에는 dynamic_cast를 사용합니다. 그래서 crash 가 발생하는 듯.
GCC의 -fno-rtti 옵션에 대한 설명입니다.
Disable generation of information about every class with virtual functions
for use by the C++ runtime type identification features (‘dynamic_cast’
and ‘typeid’). If you don’t use those parts of the language, you can save
some space by using this flag. Note that exception handling uses the same
information, but it will generate it as needed.
konqueror가 죽을 시 trace 한 결과 입니다. (첨부 그림 참조)
kde konqueror embedded 의 mailling 리스트에 관련된 내용입니다.
konqueror 의 CXXFLAGS에서
-fno-rtti 를 제거 하라고 합니다. 또한 qte도 -fno-rtti 를 제거하고 재컴파일 해야 합니다. 아래 링크를 참조하세요
http://lists.kde.org/?l=konq-e&m=116598894316737&w=2
qte의 qws 문서에서는 qte가 -fno-exception 과 -fno-rtti 가 default 로 설정되어 있다고 하는데 이는 속도와, 사이즈를 줄이기 위해서라고 합니다. qte/doc/qws.doc 에서 발췌
Qt/Embedded also requires the following flags to be defined when compiling
applications:
-DQWS -fno-exceptions -fno-rtti
Exceptions and RTTI are disabled in Qt/Embedded because they incur a large
overhead in both size and speed.
dynamic cast를 사용 안 하도록 konqueror 를 수정하면 qte 를 재컴파일 안해도 될 것 같은데.. 이는 제 능력 밖이라.. ㅠㅠ
위와 같이 fno-rtti 를 빼고 qte와 konqueror 를 모두 재컴파일 하고 실행하니 죽는 사이트와 javascript 죽는 문제 또한 해결 되었습니다. 하지만 좀전보다 속도가 느려진듯 합니다.
konqueror 를 gdb로 디버깅 하는 방법
# konqueror 실행에 필요한 shared library path 추가
LD_LIBRARY_PATH=$(HOME)qt/konq3/konq-embeded/lib.libs:$QDIR
# cd konq3/konq-embed/src/.libs
# gdb ./konqueror
# set args -qws # argument 세팅
# run
# #crash 시
# bt
댓글 달기