• 6413阅读
  • 5回复

终端下用指令编译通过,使用KDevelop编译失败的原因在那里? [复制链接]

上一主题 下一主题
离线jmone
 
只看楼主 倒序阅读 楼主  发表于: 2009-05-26
终端下用指令编译通过,使用KDevelop编译失败的原因在那里?

源程序如下:

#include <QtGui/QApplication>
#include <QtGui/QWidget>
#include <QtGui/QLabel>
#include <QtCore/QTextCodec>

int main(int argc, char *argv[]){
    QApplication app(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
    QWidget *pWidget = new QWidget;
    QLabel label(pWidget);
    label.resize(200, 60);
    label.setText(QObject::tr("同一个世界,同一个梦想!"));
    pWidget->show();
    return app.exec();
}


编译出错信息:

cd '/media/MEDIA/program/QT/hello' && LC_MESSAGES="C" LC_CTYPE="C" make clean && LC_MESSAGES="C" LC_CTYPE="C" make
cd src/ && make -f Makefile clean
rm -f main.o
rm -f *~ core *.core
cd src/ && make -f Makefile
正在编译 main.cpp (g++)
正在连接 ../bin/hello (g++)
main.o: In function `main':
main.cpp:(.text+0x31): undefined reference to `QApplication::QApplication(int&, char**, int)'
main.cpp:(.text+0x95): undefined reference to `QWidget::QWidget(QWidget*, QFlags<Qt::WindowType>)'
main.cpp:(.text+0xb2): undefined reference to `QLabel::QLabel(QWidget*, QFlags<Qt::WindowType>)'
main.cpp:(.text+0xcf): undefined reference to `QWidget::resize(QSize const&)'
main.cpp:(.text+0x101): undefined reference to `QLabel::setText(QString const&)'
main.cpp:(.text+0x12e): undefined reference to `QApplication::exec()'
main.cpp:(.text+0x138): undefined reference to `QLabel::~QLabel()'
main.cpp:(.text+0x143): undefined reference to `QApplication::~QApplication()'
main.cpp:(.text+0x15e): undefined reference to `QApplication::~QApplication()'
main.cpp:(.text+0x18a): undefined reference to `QLabel::~QLabel()'

collect2: ld returned 1 exit status
make[1]: *** [../bin/hello] Error 1
make: *** [sub-src-make_default] Error 2
*** 退出状态:2 ***

网上有人说可能是因为头文件找不到导致,如果是这样的话,我猜测问题应该是IDE引起的,那么该如何解决呢?是设置项目参数的时候出错了吗?

另外,用KDevelop编译如下代码的时候没有问题。

#include <QCoreApplication>

int main(int argc, char *argv[])
{
      QCoreApplication app(argc, argv);
      qDebug("Hello from Qt 4!");
      return 0;
}


原因何在?大家帮忙分析解决一下。谢谢!
离线yang_huafeng

只看该作者 1楼 发表于: 2009-05-26
配置   工程------------工程选项
QT使用中...
离线jmone
只看该作者 2楼 发表于: 2009-05-26
事实上,有些程序是可以编译通过,并有正确的运行结果的

#include <QCoreApplication>

int main(int argc, char *argv[])
{
      QCoreApplication app(argc, argv);
      qDebug("Hello from Qt 4!");
      return 0;
}


像上面的程序就可以通过编译和运行。

到底是什么原因导致我的程序不能通过呢?
离线jmone
只看该作者 3楼 发表于: 2009-05-26
我仔细看了一下src目录下的src.pro文件,其内容如下:

SOURCES += hello.cpp
TEMPLATE = app
CONFIG += warn_on \
      thread \
          qt
TARGET = hello
DESTDIR = ../bin
QT -= gui

前面几个都好理解,但是最后一句QT -=gui是什么意思呢?对比我用qmake -project命令生成的.pro文件(内容如下)我发现没有这句,删除它,哇塞,编译通过。。。。。。。

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

# Input
SOURCES += hello.cpp

现在返过头来想想可以通过编译的那段程序里面没有涉及GUI界面的问题,现在是知道问题如何解决了,但是原因在哪里

一知半解啊,网上也没有看到关于QT -= gui的解释,那位兄太如有相关资料请跟帖
离线kuang115
只看该作者 4楼 发表于: 2009-06-18
不知道你解决没,我和你的情况一样,这样可以解决http://www.cnblogs.com/bigshow/archive/2008/11/08/1329577.html
离线yangyunzhao

只看该作者 5楼 发表于: 2009-06-18
环境没有设置好啊,如果是linux下做,别用kdevelop,用eclipse,虽然也很烂,但是官方有直接支持,安装好了,集成度非常高,用起来有种vs的感觉。
快速回复
限100 字节
 
上一个 下一个