我正试图用我制作的库(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
(或删除相关的对象文件(。