一种解决Qt5发布release文件引发的无法定位程序输入点错误的方法

目录

本地环境

本文将不会解释如何利用Qt5编译生成release类型的可执行文件以及如何利用windeployqt生成可执行的依赖库,请自行百度。

环境
操作系统 Windows 10 专业版(22H2)
Qt版本 Qt 5.15.2
Qt Creator版本 5.0.2
编译器版本 g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0
发布类型 release
windeployqt 版本 Qt Deploy Tool 5.12.12

问题描述

编写完程序后直接利用Qt Creator发布release版本的可执行文件(exe后缀),随后再执行如下命令获取与可执行文件相关的依赖库:

powershell 复制代码
windeployqt [可执行文件]

发现确实生成一大堆*.dll ,总目录大小高达900+MB:

双击*.exe文件,提示无法定位程序输入点_ZN10QArrayData10deallocateEPs_yy

分析

起初,以为是编译器版本不对的问题,仔细对比了我用windeployqt工具时进入的环境以及我在Qt creator软件编译的环境,发现并没有什么问题,但是网上采用同样的方式均能成功运行*.exe文件,百思不得其解。

后来我根据**关键词"Qt 无法定位程序输入点"**寻找解决方案,大部分是描述依赖库的问题,我随便拿了一个动态库libstdc++-6.dll比对了我手头其他MinGW的环境,发现其实生成的这个动态库确实是编译环境中的依赖库,并没有出错。

此外,我还以为是本机的问题,便尝试将该文件以及依赖库传输到另外一台电脑运行,发现依然是同样的问题,还注意到了这些文件居然高达900+MB,这我开始怀疑是不是发布的包选错了,我写的程序仅仅几个文件,后续还是没有发现有什么错误的点。

当我重新使用windeployqt生成时,瞧了一眼日志信息,嘿,居然是以debug executable 模式生成依赖库的:

所以这肯定是会出现问题的,一个以Release方式生成的可执行文件,依赖库却按debug executable模式构建,必然出现这种找不到程序入口的问题。

解决方案

在使用windeployqt工具构建依赖库时,强制它使用release模式:

powershell 复制代码
windeployqt [可执行文件] --release

这样就没有问题了,可以看到生成的这些依赖库以及可执行文件总大小才几十兆(未优化):

相关推荐
常乐か10 分钟前
拉取FreeCAD项目步骤
qt·freecad·occ
_OP_CHEN24 分钟前
【从零开始的Qt开发指南】(十二)Qt 布局管理器终极指南:5 大布局 + 实战案例,搞定所有界面排版需求
开发语言·qt·前端开发·qt控件·布局管理器·gui开发
水煎包V:YEDIYYDS88815 小时前
QT QML 实现的摇杆按钮,类似王者荣耀 左边方向导航键
qt·qml·摇杆按钮·导航键
winfield82116 小时前
MCP 协议详解
开发语言·网络·qt
秦jh_17 小时前
【Qt】常用控件(上)
服务器·数据库·qt
刃神太酷啦17 小时前
C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
java·c语言·c++·qt·算法·leetcode·list
水煎包V:YEDIYYDS88818 小时前
QT modbus 通信教程,把modbus封装到线程单例中,在线程内完成数据收发,解析。把重要数据以信号方式通知到qml层展示,解决UI卡顿
qt·modbus·线程服务
东哥很忙XH18 小时前
python使用PyQt5开发桌面端串口通信
开发语言·驱动开发·python·qt
汪宁宇20 小时前
如何在QT5+MinGW环境中编译使用QGIS开发地图应用
c++·qt·qgis·mingw·地图库
刺客xs21 小时前
Qt-----QSS样式表
开发语言·javascript·qt