在Qt C++中使用Dlls

  • 本文关键字:Dlls Qt C++ 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:ProgrammingJaneJaneSourceNeuron.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。

有什么想法吗?

你想做什么?

LIBS += -L quote(C:ProgrammingJaneJaneSourceNeuron.dll)

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

您应该为dll找到一个库,或者使用WINAPI LoadLibrary/GetProcAddres函数动态加载dll。

这只是我的一个快速猜测:您的问题是由c++名称篡改引起的。谷歌"qt dll c++ name mangling"并找到一些工作dll/client项目的示例。

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

众所周知,qmake没有完成它应该做的所有更改,所以我建议重新运行qmake,然后再运行你的make变体(例如make、gmake、nmake(:

$ qmake
$ nmake

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

最新更新