Qt - 帮助链接动态库

时间:2013-01-31 02:12:32

标签: c++ qt dll linker dynamic-linking

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

我的步骤:

  1. 在Qt中,我转到'文件 - >新文件或项目 - >其他项目 - > C ++ Library'
  2. 在我的 mylibrary.h 中添加calc方法。
  3. 在我的 mylibrary.cpp 中实施calc方法。
  4. 我编译,然后转到创建.a.dll文件的目录。
  5. 我创建了一个新项目:'文件 - >新文件或项目 - > Qt Widget项目 - > Qt Gui申请'
  6. 我将所有标题文件从MyLibrary复制并粘贴到C:/Users/Me/includes,以及MyLibrary.dlllibMyLibrary.a复制并粘贴到C:/Users/Me/
  7. 然后我进入我的Qt Widget项目的项目文件(步骤5)。
  8. 我添加了包含路径以及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文件

    感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您定义了独立的calc功能,而不是MyLibrary::calc,请尝试:

mylibrary.cpp

#include "mylibrary.h"

MyLibrary::MyLibrary()
{
}

int MyLibrary::calc()
{
    return 5;
}