1

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

我的步骤:

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

谢谢你的帮助。

4

1 回答 1

3

您定义一个独立calc函数而不是MyLibrary::calc,请尝试:

图书馆.cpp

#include "mylibrary.h"

MyLibrary::MyLibrary()
{
}

int MyLibrary::calc()
{
    return 5;
}
于 2013-01-31T02:22:37.073 回答