Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)

本篇以Qt Creater编译器为例,创建并调用动态库,并发现选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题;选择MINGW生成和创建新项目链接dll文件就不会存在问题。

总结:

1.Qt 动态链接库生成及显式调用;

2.如果没有导入库文件(.lib),而只有头文件(.h)与动态连接库(.dll)时,我们才须要显示调用,若是这三个文件都全的话,便可使用简单方便的隐式调用;

3.选择MSVC编译器造成动态链接库无法使用的问题

  • 如果采用MSVC生成dll文件,并且采用MSVC创建新项目引用dll文件会报文件损坏;由于MSVC更适合于windows系统的APP的开发,如果想用MSVC编译器编写软件,可以参考我之前写的:Qt创建动态链接库及调用(创建子目录项目、创建动态链接库、多核编译设置、主工程配置库文件、存在运行不出来的问题及解决办法)
  • 如果采用MINGW生成dll文件,并且采用MINGW创建新项目引用dll文件就可以按照以下步骤操作后正常使用

1.新建动态链接库

  • 新建项目–>Library-->C++
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第1张图片
  • 选择共享库,命名库名称为myDLL
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第2张图片
  • 根据需要选择QtCore模块
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第3张图片
  • 定义.h.cpp文件名称
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第4张图片
  • 点击下一步后,项目的结构如下图所示,QtCraretor自动生成mydll_global.h文件
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第5张图片
  • MyDLL.hMyDLL.cpp中内容如下:增减了int myAdd(int a,int b);成员函数
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第6张图片
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第7张图片
  • 进行构建
    源码路径下存在MyDLL.hmydll_global.h
    ......\build-myDLL-Desktop_Qt_5_9_4_MSVC2017_64bit-Debug\debug下生成了myDLL.dll文件

2.调用动态链接库

  • 创建新项目,项目框架如下:

Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第8张图片

  • 对新建项目进行编译,生成build的文件夹,在D:\SelfProgram\QTTest\build-DLLConsole-Desktop_Qt_5_9_4_MSVC2017_64bit-Debug\debug路径下放myDLL.dll文件
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第9张图片

  • MyDLL.hmydll_global.h文件拷到当前项目的目录下,并将其加载到当前项目的头文件中,如下:(后来我重新创建了一个新项目DLLConsole,原始代码与上面的QtAppTest一样)
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第10张图片

  • 代码中加入#include "MyDLL.h"
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第11张图片

  • 添加代码:

#include "DLLConsole.h"
#include 

DLLConsole::DLLConsole(QWidget *parent)
    : QWidget(parent)
{
    MyDLL M;
    int value=M.myAdd(1,1);
    qDebug()<<value;
}

DLLConsole::~DLLConsole()
{

}
  • 在新建项目的.pro中添加.dll的路径:LIBS += "D:\SelfProgram\QTTest\build-DLLConsole-Desktop_Qt_5_9_4_MSVC2017_64bit-Debug\debug\myDLL.dll"
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第12张图片
  • 编译,运行程序,显示生成的动态库被调用

3.选择MSVC编译器造成动态链接库无法使用的问题


需特别注意:选择MSVC编译器生成和创建新项目链接动态链接库会造成动态链接库无法使用的问题

  • 如果采用MSVC生成dll文件,并且采用MSVC创建新项目引用dll文件会报如下错误:
    Qt 动态链接库生成及显式调用(选择MSVC编译器生成和新建项目中链接动态链接库会造成动态链接库无法使用的问题及解决方法;选择MINGW生成和创建新项目链接dll文件就不会存在问题)_第13张图片
  • 如果采用MINGW生成dll文件,并且采用MINGW创建新项目引用dll文件就可以按照以上步骤操作后正常使用

你可能感兴趣的:(Qt常用知识点,qt,c++,开发语言)