qt 프로그래밍 질문입니다.

jinstyner의 이미지

이제 막 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를 추가해주면 된다던데...아직 해결하지 못하고 있습니다.

혹시 비슷한 문제를 겪으셨던 분은 답변 부탁드립니다.
감사합니다.

thisrule의 이미지

*.pro 파일에 다음 항목을 넣어주세요
QT += thread

jinstyner의 이미지

답변 감사합니다...
그러나 이미 해본 방법인데... 역시나 안되는군요.

좀 더 바보처럼 살 수 있을때,
바보처럼 산다.

무명씨의 이미지

makefile의 내용에 -lqt가 있어야 될 텐데요.

jinstyner의 이미지

-lqt는 libqt.so를 링크할때 쓰는걸로 알고 있습니다.
제가 설치한 패키지에는(RPM으로 설치했습니다.) libqt.so는 없고
libqt-mt*만 있더군요...
아무래도 새로 설치해야할듯 ㅡ_ㅡ;;

좀 더 바보처럼 살 수 있을때,
바보처럼 산다.

jinstyner의 이미지

자답이 되어버렸군요...
-lqt-mt를 링크하니 잘되는군요.
프로젝트 파일 생성시 자동으로 lqt-mt 옵션을 넣어주는것은
아직 발견 못 했습니다. ㅡ_ㅡ

좀 더 바보처럼 살 수 있을때,
바보처럼 산다.

학림다방의 이미지

.pro에 아래 내용이 있는지 확인해 보세요.

CONFIG += qt

qt-mt를 링크하느냐 qt를 링크하느냐 하는 건 QT를 설치할 때 옵션에 따라 다릅니다. 만약 Qt에서 어플리케이션 빌드 옵션을 바꾸고 싶으시다면, $(QTDIR)/mkspecs/<플랫폼>/qmake.conf를 수정해 주시면 됩니다.

학림다방의 이미지

위에 경로 명이 이상하게 들어가 버렸네요.

mkspecs 밑에 보면 플랫폼 별로 디렉터리가 만들어져 있습니다. 제 경우에는 MS-Windows 환경에 MinGW를 사용하니 ..mkspecs/win32-g++ 입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.