尝试编译时QT未定义的引用错误

时间:2011-04-13 23:18:19

标签: c++ qt linker header-files

我在我的QT项目中添加了一个IcecastServer类,将头文件添加到pro文件中并添加了一些代码。每次我编译它时都会发生以下错误:

  

release / icecastserver.o:icecastserver.cpp :(。text + 0x39):未定义引用_imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x50): undefined reference to imp ZN12QHostAddressC1ENS_14SpecialAddressE'   release / icecastserver.o:icecastserver.cpp :(。text + 0x68):未定义引用_imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x73): undefined reference to _ imp _ZN12QHostAddressD1Ev'   release / icecastserver.o:icecastserver.cpp :(。text + 0x9d):未定义引用_imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x3d4): undefined reference to imp ZN12QHostAddressD1Ev'   release / icecastserver.o:icecastserver.cpp :(。text + 0x4bd):对_imp___ZN10QTcpServerC1EP7QObject' release/icecastserver.o:icecastserver.cpp:(.text+0x4d4): undefined reference to _ imp _ZN12QHostAddressC1ENS_14SpecialAddressE'的未定义引用   release / icecastserver.o:icecastserver.cpp :(。text + 0x4ec):未定义引用_imp___ZN10QTcpServer6listenERK12QHostAddresst' release/icecastserver.o:icecastserver.cpp:(.text+0x4f7): undefined reference to imp ZN12QHostAddressD1Ev'   release / icecastserver.o:icecastserver.cpp :(。text + 0x521):未定义引用_imp___ZNK10QTcpServer11errorStringEv' release/icecastserver.o:icecastserver.cpp:(.text+0x858): undefined reference to _ imp _ZN12QHostAddressD1Ev'

我做错了什么?

这是标题文件:

#ifndef ICECASTSERVER_H
#define ICECASTSERVER_H

#include <QObject>

QT_BEGIN_NAMESPACE
class QTcpServer;
QT_END_NAMESPACE

class IcecastServer : public QObject
{
    Q_OBJECT
public:
    explicit IcecastServer(QObject *parent = 0);

signals:

public slots:

private:
    QTcpServer *tcpServer;
};

#endif // ICECASTSERVER_H

这是源文件:

#include "icecastserver.h"
#include "QDebug"
#include <QtNetwork/QTcpServer>
#include <QtGui>

IcecastServer::IcecastServer(QObject *parent) :
    QObject(parent)
{

    tcpServer = new QTcpServer(this);
    //tcpServer->listen(QHostAddress::Any,8000);

    if (!tcpServer->listen()){
        QMessageBox::critical(NULL, tr("Fortune Server"), tr("Unable to start the server: %1.").arg(tcpServer->errorString()));

         return;
    }

}

2 个答案:

答案 0 :(得分:7)

首先,您需要#include <QHostAddress>某处,假设注释掉的行是造成问题的原因。

您还可以检查一些项目设置,看看您是否拥有所有正确的输入。

编辑:更多细节

QtNetwork需要QT网络lib输入。假设您再次使用QtCreator,因为提供的信息不多,那么这意味着您的.pro文件中需要有这样的行:

QT += network

然后确保在使用之前包含正在使用的对象的正确标题。如果您仍然获得未定义的引用,链接错误等,请尝试QMake并重建。如果它仍然存在,除了QT使用错误之外,您的代码中可能还有错误,并且应该验证您正在使用的方法和对象是否已正确声明。

最终编辑:很高兴有效......

在QTCreator中创建新项目时,向导中有一个步骤,您可以在其中检查要包含的各种QT库,这些库将为您添加这些.pro行和输入。这是输入其他lib文件的QT版本,默认情况下它们将静态链接我相信。如果要动态链接共享对象或dll,则需要一些额外的配置步骤。

答案 1 :(得分:1)

您是否在头文件上运行了moc工具?您是否随后正在编译moc工具的输出?