Связывание Qt DLL с Qt App - неразрешенные ссылки - PullRequest
1 голос
/ 05 ноября 2011

Я только что установил Qt 4.7.4 и пытаюсь создать простое приложение Qt, которое использует Qt DLL.Я добавил экспорт / импорт в класс в DLL через ifdef, как обычно, но при компиляции приложения я получаю неразрешенные ссылки.Я также установил, что приложение зависит от DLL.

Вот основные файлы:


Lib.pro

QT       -= gui

TARGET = Lib
TEMPLATE = lib

DEFINES += LIB_LIBRARY

SOURCES += lib.cpp

HEADERS += lib.h\
        Lib_global.h

symbian {
    MMP_RULES += EXPORTUNFROZEN
    TARGET.UID3 = 0xE10C4E25
    TARGET.CAPABILITY = 
    TARGET.EPOCALLOWDLLDATA = 1
    addFiles.sources = Lib.dll
    addFiles.path = !:/sys/bin
    DEPLOYMENT += addFiles
}

unix:!symbian {
    maemo5 {
        target.path = /opt/usr/lib
    } else {
        target.path = /usr/lib
    }
    INSTALLS += target
}

App.pro

QT       += core gui

TARGET = App
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

lib.h

#ifndef LIB_H
#define LIB_H

#include "Lib_global.h"
#include <QString>

class LIBSHARED_EXPORT Lib {
public:
    Lib();
    ~Lib();
    QString Hello(QString a);
};

#endif // LIB_H

Lib_global.h

#ifndef LIB_GLOBAL_H
#define LIB_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(LIB_LIBRARY)
#  define LIBSHARED_EXPORT Q_DECL_EXPORT
#else
#  define LIBSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // LIB_GLOBAL_H

Что не так с этим кодом?Почему это неразрешенная ссылка?В приложении я просто включаю "../Lib/lib.h" и пытаюсь использовать класс.

1 Ответ

1 голос
/ 05 ноября 2011

Чего не хватает, так это связи между вашим приложением и вашей динамической библиотекой.

Обычно я делаю что-то подобное для своих приложений для настольных компьютеров (linux):

INCLUDEPATH +=  ./include
LIBS += -L./lib -lLib

Где:

INCLUDEPATH определяет путь к расположению вашей общей библиотеки .h файлов.

LIBS определяет путь к вашей встроенной библиотеке.

Вы можете найти соответствующую документацию здесь: QMake - Объявление других библиотек

Обновлен:

Мне удалось собрать проект (Linux Qt v4.7.4) и связать его с библиотекой, используя опубликованный вами код. Я постараюсь уточнить, так как мой ответ может быть не совсем ясным.

Переменные INCLUDEPATH и LIBS должны быть добавлены в файл App.pro. Чтобы компоновщик правильно нашел библиотеку, пути должны быть скорректированы в соответствии с путями, которые вы используете для своего проекта:

LIBS + = -L PATH -l LIBNAME

Предположим, что ваша структура папок похожа на следующую:

Project
    |_ Lib (your sharded library project files)
    |_ App (your application project files)

Вы бы изменили переменные следующим образом:

INCLUDEPATH +=  ../Lib
LIBS += -L../Lib -lLib

Обратите внимание, что вы связываетесь по-разному в зависимости от вашей платформы, вы можете сделать что-то подобное для Windows и Linux:

unix {
     INCLUDEPATH +=  ../Lib
     LIBS += -L../Lib -lLib
}

win32 {
     INCLUDEPATH += ../Lib
     LIBS += ../Lib.lib
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...