我正在尝试用我创建的库(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
任何想法?
答案 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
(或删除相关的目标文件)。