QT调用第三方动态链接库时报错error: LNK2019: 无法解析的外部符号 “__declspec(dllimport) “,error: LNK1120: 1 个无法解析的外部命令

QT中错误提示如下:
mainwindow.obj error: LNK2019: 无法解析的外部符号 “__declspec(dllimport) int __cdecl add(int,int)” (_imp?add@@YAHHH@Z),该符号在函数 “public: __thiscall MainWindow::MainWindow(class QWidget *)” (??0MainWindow@@QAE@PAVQWidget@@@Z) 中被引用
debug\untitled2.exe error: LNK1120: 1 个无法解析的外部命令
在这里插入图片描述

问题描述:

       用QT+MSVC2015 32bit调用visual studio 2017中导出的动态链接库,按照QT调用QT自己导出的动态库的方式(具体步骤可点击链接)已经导入了该动态库。编译时报错,识别不了外部符号 "__declspec(dllimport) "。在网上搜索一通,什么.lib库没有加载,链接不正确,各种改,就是不行。
       下图是我动态库20190703.h的内容,为了测试,就写了一个简单的add函数,动态库20190703.dll是从VS2017中导出的。
QT调用第三方动态链接库时报错error: LNK2019: 无法解析的外部符号 “__declspec(dllimport) “,error: LNK1120: 1 个无法解析的外部命令_第1张图片
       

       然后我在QT里直接调用add函数,编译错误。
QT调用第三方动态链接库时报错error: LNK2019: 无法解析的外部符号 “__declspec(dllimport) “,error: LNK1120: 1 个无法解析的外部命令_第2张图片
       
       

解决办法:

使用QT里的QLibrary类来调用DLL就可以了。
QT调用第三方动态链接库时报错error: LNK2019: 无法解析的外部符号 “__declspec(dllimport) “,error: LNK1120: 1 个无法解析的外部命令_第3张图片

代码如下:

 QLibrary my_dll("20190703.dll");
    if(my_dll.load()){
        qDebug()<<"20190703.dll load successfully";

        //int c=add(1,2);

        typedef int (*add)(int,int);
        add Add = (add)my_dll.resolve("add");
        int c=Add(5,2);

        qDebug()<<c;
    }else{
        qDebug()<<"failed to load 20190703.dll";
    }

       使用QT+MinGW导出和调用动态链接库,导出的类和函数是可以像普通函数一样直接调用的,没有出现过无法解析的外部符号 “__declspec(dllimport) “这个问题。
       VS的编译器和MinGW不是一个体系,我本以为调用VS导出的动态链接库时必须使用QT+MSVC环境,但今天试了一下,QT+MinGW环境用上述QLibrary类可以成功调用VS中导出的动态链接库。
       QLibrary提供与平台无关的方式访问库中的函数,resove()函数可以用来解析库中的符号地址。

你可能感兴趣的:(#,Qt,dll,c++,qt,vs)