QT неопределенные ссылочные ошибки при попытке компиляции - PullRequest
6 голосов
/ 14 апреля 2011

Я добавил класс IcecastServer в свой QT-проект, добавил заголовочный файл в 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:): 0 :(d):)ссылка на _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_14Special /ddressver.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 ]

7 голосов
/ 14 апреля 2011

Сначала вам нужно #include <QHostAddress> где-то, предполагая, что закомментированная строка - это то, что вызвало проблему.

Вы также можете проверить некоторые настройки проекта, чтобы убедиться, что у вас есть все правильные данные.

Редактировать: Подробнее

Для QtNetwork требуются входные данные библиотеки QT network.Предполагая еще раз, что вы используете QtCreator, так как было предоставлено не так много информации, это означает, что в вашем .pro-файле вам нужно иметь такую ​​строку:

QT += network

Затем убедитесь, что вывключите правильные заголовки для объектов, которые вы используете, прежде чем их использовать.Если вы по-прежнему получаете неопределенные ссылки, ссылки на ошибки и т. Д., Попробуйте QMake и пересоберите.Если это все еще сохраняется, возможно, у вас есть ошибки в вашем коде в дополнение к ошибкам использования QT, и вам следует проверить правильность объявления используемых методов и объектов.

Окончательное редактирование: Рад, что сработало ...

Когда вы создаете новый проект в QTCreator, в мастере есть шаг, где вы можете отметить различные библиотеки QT, которые вы хотите включить, которые добавят эти строки .pro и входные данные для вас.Это версия QT для ввода дополнительных файлов lib, и, по-моему, они будут статически связаны между собой.Если вы хотите динамически связываться с общими объектами или dll, тогда есть некоторые дополнительные шаги по настройке.

1 голос
/ 14 апреля 2011

Запускаете ли вы инструмент moc над своим заголовочным файлом? Вы впоследствии компилируете выходные данные из инструмента moc?

...