一种解决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后缀),随后再执行如下命令获取与可执行文件相关的依赖库:

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模式:

windeployqt [可执行文件] --release

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

在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,问题描述了在打包Qt程序时出现了一个错误错误信息是"无法定位程序输入?setGeometry@QWidget@@QEAAXHHHH@Z于动态链接库"。这个错误通常意味着程序无法在动态链接库中找到所需的函数。根据引用,你提到源路径为"D:\Qt\5.15.2\mingw81_32\bin\libwinpthread-1.dll"。这是一个动态链接库,可能与你的程序有关。解决这个问题的方法是使用正确的工具编译并调用对应的bin目录下的windeployqt程序,如引用所述。这将确保在发布版本中使用了正确的动态链接库,解决无法定位程序输入的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [qt6打包发布应用程序exe出现无法定位程序输入?setGeometry@QWidget@@QEAAXHHHH@Z于动态链接库解决办法](https://blog.csdn.net/memorywithyou/article/details/128747080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Qt打包生成exe: 无法定位程序输入](https://blog.csdn.net/booksyhay/article/details/121427237)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值