c++ - Qt - 帮助链接动态库

标签 c++ qt dll linker dynamic-linking

我在将 DLL 链接到我的 Qt 项目这一简单任务上遇到了很多麻烦。

我的步骤:

  1. 在 Qt 中,我转到“文件 -> 新文件或项目 -> 其他项目 -> C++ 库”
  2. calc 方法添加到我的 mylibrary.h
  3. 在我的 mylibrary.cpp 中实现 calc 方法。
  4. 我编译,然后转到创建 .a.dll 文件的目录。
  5. 我创建了一个新项目:“文件 -> 新文件或项目 -> Qt Widget 项目 -> Qt Gui 应用程序”
  6. 我将所有头文件从 MyLibrary 复制并粘贴到 C:/Users/Me/includes,以及 MyLibrary.dlllibMyLibrary.aC:/Users/Me/
  7. 然后我进入我的 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/

相关文章:

c++ - 如何从主类中调用 C++ 中的函数?

c++ - 未解析的外部符号 public __thiscall 仅在 Debug模式下

c++ - Qt 控制台应用程序的标准配置方法是什么?

linux - QTcreator + Cimg.h = 打开 .jpg .png 时出错

c# - 为什么重命名 dll 扩展名(即重命名为 dllold)会在运行时导致 FileNotFound 异常?

c++ - 将类初始化为结构体成员

c++ - 无返回值的整数函数

c++ - 针对 dll/lib 的 cmake 链接

c# - 如何将结构从 C# 传递到 C++ DLL?

c++ - 是否可以将 `integral_constant` 列表转换回 `T` 列表?