qt 프로그래밍 질문입니다.
이제 막 Qt를 공부하려고 합니다.
Qt는 Fedora4를 인스톨시 바로 깔았습니다.
[root@watch mkspecs]# rpm -qa qt*
qt-designer-3.3.4-14
qt-devel-3.3.4-14
qt-3.3.4-14
hello world 프로그램의 코드를 작성하고
[styner@watch qt]$ qmake -project
[styner@watch qt]$ qmake
[styner@watch qt]$ make
하였더니, 다음과 같은 에러가 발생합니다.
g++ -o qt hw.o -L/usr/X11R6/lib -lXext -lX11 -lm
hw.o(.text+0x27): In function `main':
/home/styner/workspace/qt/hw.cpp:9: undefined reference to `QApplication::QApplication(int&, char**)'
hw.o(.text+0x3a):/home/styner/workspace/qt/hw.cpp:11: undefined reference to `QString::QString(char const*)'
hw.o(.text+0x5c):/home/styner/workspace/qt/hw.cpp:11: undefined reference to `QPushButton::QPushButton(QString const&, QWidget*, char const*)'
hw.o(.text+0x70): In function `main':
/usr/lib/qt-3.3/include/qstring.h:847: undefined reference to `QString::shared_null'
hw.o(.text+0x7a):/usr/lib/qt-3.3/include/qstring.h:848: undefined reference to `QStringData::deleteSelf()'
hw.o(.text+0x92): In function `main':
/home/styner/workspace/qt/hw.cpp:12: undefined reference to `QPushButton::resize(int, int)'
hw.o(.text+0x9e):/home/styner/workspace/qt/hw.cpp:14: undefined reference to `QApplication::setMainWidget(QWidget*)'
hw.o(.text+0xa6):/home/styner/workspace/qt/hw.cpp:15: undefined reference to `QWidget::show()'
hw.o(.text+0xae):/home/styner/workspace/qt/hw.cpp:16: undefined reference to `QApplication::exec()'
hw.o(.text+0xb8):/home/styner/workspace/qt/hw.cpp:16: undefined reference to `QPushButton::~QPushButton()'
hw.o(.text+0xc0):/home/styner/workspace/qt/hw.cpp:16: undefined reference to `QApplication::~QApplication()'
hw.o(.text+0xe0): In function `main':
/usr/lib/qt-3.3/include/qstring.h:847: undefined reference to `QString::shared_null'
hw.o(.text+0xea):/usr/lib/qt-3.3/include/qstring.h:848: undefined reference to `QStringData::deleteSelf()'
hw.o(.text+0xf2): In function `main':
/home/styner/workspace/qt/hw.cpp:16: undefined reference to `QApplication::~QApplication()'
hw.o(.text+0x108):/home/styner/workspace/qt/hw.cpp:16: undefined reference to `QPushButton::~QPushButton()'
hw.o(.gnu.linkonce.r._ZTI6QGList[typeinfo for QGList]+0x8): undefined reference to `typeinfo for QPtrCollection'
hw.o(.gnu.linkonce.r._ZTV6QGList[vtable for QGList]+0xc): undefined reference to `QGList::clear()'
hw.o(.gnu.linkonce.r._ZTV6QGList[vtable for QGList]+0x10): undefined reference to `QGList::~QGList()'
hw.o(.gnu.linkonce.r._ZTV6QGList[vtable for QGList]+0x14): undefined reference to `QGList::~QGList()'
hw.o(.gnu.linkonce.r._ZTV6QGList[vtable for QGList]+0x18): undefined reference to `QPtrCollection::newItem(void*)'
hw.o(.gnu.linkonce.r._ZTV6QGList[vtable for QGList]+0x20): undefined reference to `QGList::compareItems(void*, void*)'
hw.o(.gnu.linkonce.r._ZTV6QGList[vtable for QGList]+0x24): undefined reference to `QGList::read(QDataStream&, void*&)'
hw.o(.gnu.linkonce.r._ZTV6QGList[vtable for QGList]+0x28): undefined reference to `QGList::write(QDataStream&, void*) const'
collect2: ld returned 1 exit status
make: *** [qt] 오류 1
이곳 저곳을 찾아보니, 소스는 single thread용인데 시스템에는 multi thread용 qt라이브러리 밖에 없어서
그렇다고 합니다...
project 파일의 CONFIG에 thread를 추가해주면 된다던데...아직 해결하지 못하고 있습니다.
혹시 비슷한 문제를 겪으셨던 분은 답변 부탁드립니다.
감사합니다.
*.pro 파일에 다음
*.pro 파일에 다음 항목을 넣어주세요
QT += thread
답변
답변 감사합니다...
그러나 이미 해본 방법인데... 역시나 안되는군요.
좀 더 바보처럼 살 수 있을때,
바보처럼 산다.
makefile의 내용에
makefile의 내용에 -lqt가 있어야 될 텐데요.
-lqt는
-lqt는 libqt.so를 링크할때 쓰는걸로 알고 있습니다.
제가 설치한 패키지에는(RPM으로 설치했습니다.) libqt.so는 없고
libqt-mt*만 있더군요...
아무래도 새로 설치해야할듯 ㅡ_ㅡ;;
좀 더 바보처럼 살 수 있을때,
바보처럼 산다.
ㅡ_ㅡ
자답이 되어버렸군요...
-lqt-mt를 링크하니 잘되는군요.
프로젝트 파일 생성시 자동으로 lqt-mt 옵션을 넣어주는것은
아직 발견 못 했습니다. ㅡ_ㅡ
좀 더 바보처럼 살 수 있을때,
바보처럼 산다.
Project 파일을 확인해 보세요.
.pro에 아래 내용이 있는지 확인해 보세요.
CONFIG += qt
qt-mt를 링크하느냐 qt를 링크하느냐 하는 건 QT를 설치할 때 옵션에 따라 다릅니다. 만약 Qt에서 어플리케이션 빌드 옵션을 바꾸고 싶으시다면, $(QTDIR)/mkspecs/<플랫폼>/qmake.conf를 수정해 주시면 됩니다.
내용 수정
위에 경로 명이 이상하게 들어가 버렸네요.
mkspecs 밑에 보면 플랫폼 별로 디렉터리가 만들어져 있습니다. 제 경우에는 MS-Windows 환경에 MinGW를 사용하니 ..mkspecs/win32-g++ 입니다.
댓글 달기