LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1544|回复: 7

初学QT,写了一个简单的helloworld程序,但是却编译发生错误,请大家帮忙看看是怎么回事?

[复制链接]
发表于 2006-8-20 11:12:50 | 显示全部楼层 |阅读模式
程序源码如下:
[PHP]/*helloworld.cpp*/
#include <qapplication.h>
#include <qlabel.h>
#include <qstring.h>

int main(int argc,char **argv)
{
        QApplication app(argc,argv);
        QLabel *label = new QLabel(NULL);
        QString string("Hello, World");
        label->setText(string);
        label->setAlignment(
                Qt::AlignVCenter | Qt::AlignHCenter);
        label->setGeometry(0,0,180,75);
        label->show();
        app.setMainWidget(label);
        return(app.exec());
}
[/PHP]

编译时的错误如下:
[PHP][jing@JING ~]$ g++ -I$QTDIR/include helloqt.cpp
/tmp/ccDYsR8C.o:在函数‘main’中:
helloqt.cpp.text+0x24):对‘QApplication:Application(int&, char**)’未定义的引用
helloqt.cpp.text+0x56):对‘QLabel:Label(QWidget*, char const*, unsigned int)’未定义的引用
helloqt.cpp.text+0x6f):对‘QString:String(char const*)’未定义的引用
helloqt.cpp.text+0x11b):对‘QApplication::setMainWidget(QWidget*)’未定义的引用
helloqt.cpp.text+0x126):对‘QApplication::exec()’未定义的引用
helloqt.cpp.text+0x157):对‘QApplication::~QApplication()’未定义的引用
helloqt.cpp.text+0x170):对‘QApplication::~QApplication()’未定义的引用
/tmp/ccDYsR8C.o:在函数‘QString::~QString()’中:
helloqt.cpp.text._ZN7QStringD1Ev[QString::~QString()]+0x1d):对‘QString::shared_null’未定义的引用
helloqt.cpp.text._ZN7QStringD1Ev[QString::~QString()]+0x2e):对‘QStringData::deleteSelf()’未定义的引用
/tmp/ccDYsR8C.o.rodata._ZTV6QGList[vtable for QGList]+0xc):对‘QGList::clear()’未定义的引用
/tmp/ccDYsR8C.o:(.rodata._ZTV6QGList[vtable for QGList]+0x10):对‘QGList::~QGList()’未定义的引用
/tmp/ccDYsR8C.o:(.rodata._ZTV6QGList[vtable for QGList]+0x14):对‘QGList::~QGList()’未定义的引用
/tmp/ccDYsR8C.o:(.rodata._ZTV6QGList[vtable for QGList]+0x18):对‘QPtrCollection::newItem(void*)’未定义的引用
/tmp/ccDYsR8C.o:(.rodata._ZTV6QGList[vtable for QGList]+0x20):对‘QGList::compareItems(void*, void*)’未定义的引用
/tmp/ccDYsR8C.o:(.rodata._ZTV6QGList[vtable for QGList]+0x24):对‘QGList::read(QDataStream&, void*&)’未定义的引用
/tmp/ccDYsR8C.o:(.rodata._ZTV6QGList[vtable for QGList]+0x28):对‘QGList::write(QDataStream&, void*) const’未定义的引用
/tmp/ccDYsR8C.o:(.rodata._ZTI6QGList[typeinfo for QGList]+0x8):对‘typeinfo for QPtrCollection’未定义的引用
collect2: ld 返回 1
[/PHP]

这个问题应该是很低级的,还望大家给小弟指导一下
发表于 2006-8-20 15:01:14 | 显示全部楼层
后面要用 -lqt 之类的连接选项吧! 我不熟悉QT,不知对不对。
回复 支持 反对

使用道具 举报

发表于 2006-8-20 15:01:15 | 显示全部楼层
后面要用 -lqt 之类的连接选项吧! 我不熟悉QT,不知对不对。
回复 支持 反对

使用道具 举报

发表于 2006-8-20 21:43:27 | 显示全部楼层
很可能是库的问题.是不是有的库没装?
回复 支持 反对

使用道具 举报

发表于 2006-8-21 12:53:32 | 显示全部楼层
应该有 qt-config --cflags --libs 之类的,要加头文件路径
回复 支持 反对

使用道具 举报

发表于 2006-8-26 15:13:51 | 显示全部楼层
兄弟,你的代码没问题的,我试了一下可以通过,QT的程序应该这样编译

ljt@debian:~/qt3/test/tmp$ vi test.cpp
ljt@debian:~/qt3/test/tmp$ qmake -project
ljt@debian:~/qt3/test/tmp$ qmake
ljt@debian:~/qt3/test/tmp$ make
g++ -c -pipe -Wall -W -O2 -D_REENTRANT  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -o test.o test.cpp
g++  -o tmp test.o    -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread
ljt@debian:~/qt3/test/tmp$ ./tmp
ljt@debian:~/qt3/test/tmp$
回复 支持 反对

使用道具 举报

发表于 2006-8-27 04:58:36 | 显示全部楼层
export QTDIR="/usr/share/qt3"
回复 支持 反对

使用道具 举报

发表于 2006-8-30 20:18:21 | 显示全部楼层
要设定QT的头文件目录 ,在连接时在连接到QT库。
写个QT的project文件就能用qmake自动生成Makefile了

hello.pro文件
SOURCES = chello.cpp  //项目中的源文件
HEADERS =  hello.h      //项目中的头文件
CONFIG +=
然后用 qmake hello.pro就能自动生成自动生成Makefile了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表