Использование Dlls в Qt C ++ - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь построить проект с библиотекой (dll), которую я сделал.Я никогда раньше не пытался ни загрузить, ни создать библиотеку, и получаю следующую ошибку.

ошибка: неопределенная ссылка на ` imp __ ZN6NeuronC1Ev '

ВQt, ошибка показана в следующей строке.

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow) <--------------------------- Error indicated here.
{
    ui->setupUi(this);
}

Файл проекта

QT       += core gui

TARGET = Jane
TEMPLATE = app
LIBS += -L quote(C:\Programming\Jane\Jane\Source\Neuron.dll)

SOURCES += main.cpp\
        MainWindow.cpp

HEADERS  += MainWindow.h

FORMS    += MainWindow.ui

Вот один из классов, которые я экспортировал

#ifndef NEURON_H
#define NEURON_H

#include <QList>
#include "Neuron_global.h"
#include <Sensor.h>

class NEURONSHARED_EXPORT Neuron
{
public:
    explicit Neuron();

    const double getOutput() const;
    const double & getWeight() const;

    void setWeight(const double& weight);
private:
    double weight;              // The weight of this neuron.

    QList<Neuron*> neurons;     // This Neuron's children.
    QList<Sensor*> sensors;     // This Neuron's Sensors.
};

#endif // NEURON_H

NEURONSHARED_EXPORT Марко определен в "Neuron_global.h"

#ifndef NEURON_GLOBAL_H
#define NEURON_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(NEURON_LIBRARY)
#  define NEURONSHARED_EXPORT Q_DECL_EXPORT
#else
#  define NEURONSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // NEURON_GLOBAL_H

Если у кого-нибудь есть какие-либо советы о том, как это исправить, я был бы очень признателен.

Редактировать: Я добавилфайл libNeuron.a с аргументом LIBS в файле pro.Однако теперь я получаю следующую ошибку:

LIBS + = libNeuron.a

не могу найти -lNeuron.a

какие-либо идеи?

Ответы [ 3 ]

1 голос
/ 29 июня 2011

Что вы пытаетесь сделать?

LIBS += -L quote(C:\Programming\Jane\Jane\Source\Neuron.dll)

В этой переменной содержатся lib-файлы, с которыми будет связан проект, а не сама библиотека!

Вы должны найти библиотеку для dll или использовать функции WINAPI LoadLibrary / GetProcAddres для динамической загрузки dll.

0 голосов
/ 28 июня 2011

В этом случае все выглядит правильно (при условии, что NEURON_LIBRARY не определено, поскольку вы строите по шаблону app, хотя Windows v. Linux действует по-другому в этом отношении).

qmakeизвестно, что он не принимает все необходимые изменения, поэтому я бы порекомендовал повторно запустить qmake и затем ваш вариант make (например, make, gmake, nmake):

$ qmake
$ nmake

В некоторых случаях вына самом деле нужно будет сделать clean (или удалить соответствующие объектные файлы), прежде чем все сможет правильно связать.

0 голосов
/ 28 июня 2011

Это только мое быстрое предположение: ваша проблема вызвана искажением имен в c ++.Google "qt dll c++ name mangling" и найдите несколько примеров рабочих проектов DLL / клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...