c++ - QImage@@QEAA@$$QEAV0@@Z 无法在 dll 中定位
问题描述
我有一个在 QtCreator 中制作的程序,可以在 Linux 和 Windows 上运行。该程序在其他开源库上使用 Qt、OpenCV(这不是这里的问题。)我的问题是QImage
当我尝试在没有 IDE 的情况下运行我的 exe 时有一些未解决的问题。
**对于这个问题的上下文,有问题的 exe 将被称为“project.exe”
我试图将 project.exe Qt5Gui.dll(因为 QImage 在那里)都放在 Dependenciy Walker 中。令我惊讶的是,project.exe 缺少与标题中的错误完全相同的功能。但是,对于 Qt5Gui.dll,DLL 中没有缺少相同的函数。
这是 Qt 在 .pro 文件中包含和使用的内容
QT += core gui
这里的计划是在 Windows 上拥有一个没有 IDE(Qt Creator)的工作应用程序。为了做到这一点,我过去曾为许多其他 Qt 应用程序做过这些确切的步骤。这是一个批处理脚本:
mkdir build
cd build
call "%path_to_visual_studio%\VC\Auxiliary\Build\vcvarsall.bat" x64
call "%path_to_qt%\msvc2017_64\bin\qmake.exe" path\to\project.pro -spec win32-msvc "CONFIG+=qtquickcompiler" && "%path_to_qt%\Tools\QtCreator\bin\jom.exe" -f Makefile.Release
call "%path_to_qt%\msvc2017_64\bin\windeployqt.exe" project.exe
完成此操作后,Qt 的 windeployqt.exe 添加了 Qt 的所有必需项,然后我添加了我的 opencv DLL,此时,一切正常。但是当我尝试运行project.exe
时,我得到了错误:
The procedure entry point
??0QImage@@QEAA@$$QEAV0@@Z could not be located in the dynamic link library
C:\Path\to\project.exe
谢谢您的帮助!
解决方案
该问题可能是由不同的 Qt dll 引起的 - 使用不同的编译器构建。使用 ProcessExplorer ( procexp.exe
) 或类似程序查看Qt5Gui.dll
从 IDE 内部启动时使用您的应用程序的确切文件夹。然后使用search everything
(voidtools) 查找具有相似名称的 dll。重命名该其他文件夹并尝试再次启动/构建。
推荐阅读
- vue.js - Vue:事件总线处理程序未定义
- javascript - 嵌套折线图未显示
- oauth-2.0 - 在 OpenID 流中提交令牌请求时如何修复“无效签名”API 错误?
- c# - 如何将结构数组从 c++ 传递到 c#?
- javascript - React hooks - setState 没有更新状态属性以显示侧边栏
- javascript - 我不知道为什么我不断收到此错误
- c++ - 我可以从样式表 (qss) 更改自定义动态属性吗?
- android - 我在哪里可以找到用于对象地标检测的 Tensorflow lite 项目(例如面部地标)?
- binary - 求十进制整数 -102 的 8 位 2 的补码
- sql - 保存查询中选择子句的结果以在同一查询中重复使用?