Qt调用dll时出现无法调用的情况,自查步骤(重)

本文详细介绍了在Qt调用dll过程中可能出现的问题及自查步骤,包括dll内部依赖缺失、位数不匹配以及mingw与VS环境差异导致的调用错误,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自查步骤

1. dll内部问题
动态库dll中可能也调用了一些外部动态链接库。
比如在qt4上生成的动态库可能会使用到qt4的动态库如:qtsql4,如果只把生成的动态库放到.exe的路径下会发现,程序运行时,会发现打开这个dll,用QLibrary的errorString()函数会发现输出

Cannot load library XXXXXX.dll: 找不到指定的模块。

这种情况下可使用,depends(Dependency Walker)查看dll,若内部缺少了依赖库,则会显示如下
此处少了
此处少了QTCORE4.DLL库,只要把QTCORE4.DLL库放到调用的dll同个目录下在调用即可正常使用

2. dll库生成的位数或方式不同
若dll库是在64位的qt中生成的,则32位的qt无法调用此依赖库。同理,如果dll库是以debug的方式生成的,则无法在release项目中使用。

解决方法:对应生成与调用即可

3. mingw与vs的区别
mingw使用直接调用DLL的方法,即使用头文件,dll,lib三个文件调用库的方法,会出现错误。
这种情况下可直接使用QLibrary调用动态库;注意,需要将dll放到.exe的目录下,否则无法找到dll

int main(int argc, char *argv[])
{
    QLibrary mylib("XXXX.dll");
    qDebug()<<mylib.load();
    qDebug()<<mylib.errorString();
}

…后续遇到其他dll调用问题继续更新