在Qt C ++中使用Dll

时间:2011-06-28 17:39:09

标签: c++ qt dll

我正在尝试用我创建的库(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 Marco在“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文件添加到pro文件中的LIBS参数。但是,我现在收到以下错误。

LIBS + = libNeuron.a

找不到-lNeuron.a

任何想法?

3 个答案:

答案 0 :(得分:1)

你想做什么?

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

它变量包含一个lib文件,该项目将与之链接,而不是库本身!

你应该找到一个DLL的lib或使用WINAPI LoadLibrary / GetProcAddres函数动态加载DLL。

答案 1 :(得分:0)

这只是我的一个快速猜测:你的麻烦是因为c ++名称错误造成的。谷歌 “qt dll c++ name mangling” 并找到一些工作DLL /客户端项目的例子。

答案 2 :(得分:0)

在这种情况下,一切看起来都正确(假设NEURON_LIBRARY未定义,因为您在app模板下构建,尽管Windows v.Linux在这方面的行为不同。)

qmake众所周知不会接受它应该进行的所有更改,所以我建议重新运行qmake,然后再运行make变量(例如make,gmake,nmake):

$ qmake
$ nmake

在某些情况下,在所有内容都能正确链接之前,您实际上需要执行clean(或删除相关的目标文件)。