Cannot mix incompatible Qt library (version ) with this library (version )

9 篇文章 0 订阅
9 篇文章 0 订阅

当发生如下错误:

Cannot mix incompatible Qt library (version 0x40806) with this library (version 0x40805)

首先要知道意义是:

载入dll的时候0x40805加载了0x40806,导致出错。主语是0x40805。换句话说是0x40805必须载入0x40805。

以上0x40805 意义就是 dll的版本是qt4.85, 0x40806亦然.


由于我环境中qt4.8.5已经删除。检查环境变量Path、QTDIR也是指向4.86. 不明白为何我程序中有4.85的dll,而且大行其道,阻碍我加载其他4.86的dll。

没办法,单步调试,发现发生上述错误的地方是以下这一行:

QScriptEngine engine;
所以很容易想到是QtScriptd4.dll有问题(虽然问题可能不是他)。

因为我这里是只可能执行文件当前目录有问题,所以只看的当前目录的qt自带的dll。
用vs工具Visual Studio Command Prompt 执行如下命令
dumpbin /headers C:/Qt/4.8.6/QtScriptd4.dll | findstr image
4.86 image version
这表明 QtScriptd4.dll没问题,那么谁有问题呢
再次查询
dumpbin /headers QtCored4.dll | findstr image
4.85 image version
原来真正有问题的是QtCored4,因为是QtCored4.dll加载的QtScriptd4.dll,所以报错0x40805加载了0x40806出错。

一切水落石出了,原来虽然我当前用的QT4.86编译的程序,但是dll还是用的4.85的。
最简单的解决办法,拷贝一个4.85的QtScriptd4.dll到执行文件目录即可。


总结:
1)源代码用qt4.86,dll用qt4.85是可以的(与上面没矛盾,这里指的是统一用qt4.8.5的dll。),因为跨度不大,当然有其他问题的时候最好源码代码和dll全部统一。
2)dll的版本号必须全部统一。
3)可用dumpbin /headers QtCored4.dll | findstr image查看QT的dll的版本号(当然右键属性也可以看到)
4)dll加载的顺序是本地目录优先,其次环境变量Path中的目录,只加载第一个先找到的
5)解决办法是先查看自己执行文件同目录的qt自带的dll版本号(假如有的话)。再查看环境变量(如Path,QTDIR)下的qt自带的dll版本号,保证一致。


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常是由于使用了不兼容的 Qt 库版本导致的。你可以尝试以下步骤来解决这个问题: 1. 确认你的程序中使用的 Qt 版本与你编译程序时使用的 Qt 版本一致。 2. 如果你使用的是 Qt Creator,可以在项目文件中指定使用的 Qt 版本。在 .pro 文件中添加以下代码: ``` QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 CONFIG -= app_bundle # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 # This variable allows you to include your own .h files from the current directory. # These files are included after the standard Qt files. INCLUDEPATH += . # This variable allows you to add additional libraries to link against. # This comes in handy when using external libraries. #LIBS += -L$$PWD/../../../../../Qt/Qt5.9.5/5.9.5/clang_64/lib/ -lQt5Widgets QT += widgets SOURCES += \ main.cpp \ mainwindow.cpp \ dialog.cpp \ moc_dialog.cpp HEADERS += \ mainwindow.h \ dialog.h FORMS += \ mainwindow.ui \ dialog.ui ``` 3. 如果你使用的是 Qt 库文件而不是 Qt Creator,可以尝试重新编译 Qt 库文件或者下载与你使用的 Qt 版本相符的库文件。 希望这些步骤可以帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值