我在将 DLL 链接到我的 Qt 项目这一简单任务上遇到了很多麻烦。
我的步骤:
- 在 Qt 中,我转到“文件 -> 新文件或项目 -> 其他项目 -> C++ 库”
- 将
calc
方法添加到我的 mylibrary.h。 - 在我的 mylibrary.cpp 中实现
calc
方法。 - 我编译,然后转到创建
.a
和.dll
文件的目录。 - 我创建了一个新项目:“文件 -> 新文件或项目 -> Qt Widget 项目 -> Qt Gui 应用程序”
- 我将所有头文件从 MyLibrary 复制并粘贴到
C:/Users/Me/includes
,以及MyLibrary.dll
和libMyLibrary.a
到C:/Users/Me/
。 - 然后我进入我的 Qt Widget 项目的项目文件(第 5 步)。
我添加了包含路径以及 DLL 路径:
INCLUDEPATH += "C:/Users/Me/includes"
LIBS += "C:/Users/Me/MyLibrary.dll"
然后我进入我的mainwindow.cpp
,并输入这段代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include "mylibrary.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MyLibrary myLib;
qDebug() << myLib.calc();
}
MainWindow::~MainWindow()
{
delete ui;
}
当然,我会遇到未定义的错误:
C:\Users\Me\Desktop\TestInternals-Win\..\TestInternals\mainwindow.cpp:15: error: undefined reference to `_imp___ZN13MyLibrary4calcEv'
C:\Users\Me\Desktop\TestInternals-Win\..\TestInternals\mainwindow.cpp:15: error: undefined reference to `_imp___ZN13MyLibrary4calcEv'
:-1: error: collect2: ld returned 1 exit status
MyLibrary 文件内容
mylibrary.h 内容:
#ifndef MYLIBRARY_H
#define MYLIBRARY_H
#include "MyLibrary_global.h"
class MYLIBRARYSHARED_EXPORT MyLibrary{
public:
MyLibrary();
int calc();
};
#endif // MYLIBRARY_H
mylibrary.cpp 内容:
#include "mylibrary.h"
MyLibrary::MyLibrary()
{
}
int calc()
{
return 5;
}
我没有接触过 Qt 生成的 MyLibrary_global.h 文件
感谢您的帮助。
最佳答案
你定义一个独立的 calc
函数而不是 MyLibrary::calc
,尝试:
我的图书馆.cpp
#include "mylibrary.h"
MyLibrary::MyLibrary()
{
}
int MyLibrary::calc()
{
return 5;
}
关于c++ - Qt - 帮助链接动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617344/