当前位置: 首页 > news >正文

QT程序异常结束解决方法

在用QT开发第三方SDK的时候,刚开始是运行正常的,但是重装系统之后再次运行程序总是出现:程序异常结束。

以下方法尝试无效,但不失为一种排查方法:

  1. 重新安装QT;
  2. 检查Qt Creator配置,编译器位数和SDK匹配;
  3. 清理(Clean)和重新构建(Rebuild)项目;
  4. 检查.pro 文件包含的所有必要的依赖文件路径是否正确;
INCLUDEPATH += $$PWD/include
LIBS += $$PWD/lib/XX.lib
  1. 确保XX.dll 位于程序的可执行文件所在的目录(release 目录);

后面发现只要调用第三方SDK的库函数就会出现这个问题,如果不调用就正常,所以从排查dll文件入手。

以下几种方法可以排查dll问题:

  1. 有些SDK可能依赖特定版本的运行时库。例如,Visual C++ Redistributable。尝试安装后无效。
  2. 确保 XX.dll 位于程序的可执行文件所在的目录( release 目录),或者将其路径添加到系统的 PATH 环境变量中。尝试后无效。
  3. 检查SDK是哪种模式:Debug模式和release模式;
  4. 确保 XX.dll 及其依赖项具有正确的文件权限。所有相关文件都应具有可读和可执行权限。
  5. 尝试使用 DLL 的完整路径来加载:
#include <QCoreApplication>
#include <QDebug>
#include <Windows.h> // 如果使用Windows平台int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 使用完整路径检查DLL是否加载成功HMODULE hModule = LoadLibrary(L"C:\\path\\to\\XX.dll");if (!hModule){qDebug() << "Failed to load XX.dll";return -1;}qDebug() << "XX.dll loaded successfully";return a.exec();
}

如果加载失败,查看失败的原因:

#include <QCoreApplication>
#include <QDebug>
#include <Windows.h>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 使用完整路径检查DLL是否加载成功HMODULE hModule = LoadLibrary(L"C:\\path\\to\\XX.dll");if (!hModule){DWORD errorMessageID = ::GetLastError();LPSTR messageBuffer = nullptr;size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);QString message = QString::fromLocal8Bit(messageBuffer, size);LocalFree(messageBuffer);qDebug() << "Failed to load XX.dll:" << message;return -1;}qDebug() << "XX.dll loaded successfully";return a.exec();
}

可以看到显示:Failed to load XX.dll: "找不到指定的模块。说明dll有依赖的模块没有找到。

  1. 下载并安装 Dependency Walker:Dependency Walker 官方网站

启动 Dependency Walker,打开 XX.dll 文件。检查缺失的依赖项。

Dependency Walker 会列出所有的依赖项及其状态。如果有缺失的依赖项,会显示为红色的 “X”。记录这些缺失的 DLL 文件。在这里插入图片描述

结合Dependency Walker 的结果,发现缺少WinPcap.dll。我在安装Npcap后不再出现错误。

WinPcap 已经不再维护,使用 Npcap,是WinPcap替代品。

如果有其它dll缺失继续安装。重新运行 Dependency Walker 来确认所有依赖项都已解决。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • rancher管理多个集群
  • 科技云报道:产业为根大模型应用为擎,容联云推动企业营销服场景重塑
  • 【网络协议】PIM
  • 深入浅出:Scikit-Learn基础教程
  • 初中生物知识点总结(人教版)
  • 市场营销中智能决策支持系统的设计与应用分析
  • C++多态的实现原理
  • python 代码设计贪吃蛇
  • python如何查看类的函数
  • C++学习笔记
  • 自动化回复信息工具的开发分享!
  • 报错:pytest: error: argument -m: expected one argument (via addopts config)
  • 100 个网络基础知识普及,看完成半个网络高手!
  • 程序的控制结构——if-else语句(双分支结构)【互三互三】
  • 语言模型演进:从NLP到LLM的跨越之旅
  • 【Amaple教程】5. 插件
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • GraphQL学习过程应该是这样的
  • HTML-表单
  • JavaWeb(学习笔记二)
  • Java应用性能调优
  • MySQL-事务管理(基础)
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • php ci框架整合银盛支付
  • python大佬养成计划----difflib模块
  • React系列之 Redux 架构模式
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue.js源码(2):初探List Rendering
  • Yii源码解读-服务定位器(Service Locator)
  • Zsh 开发指南(第十四篇 文件读写)
  • 不上全站https的网站你们就等着被恶心死吧
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 从伪并行的 Python 多线程说起
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 聊聊directory traversal attack
  • 免费小说阅读小程序
  • 写给高年级小学生看的《Bash 指南》
  • 学习HTTP相关知识笔记
  • C# - 为值类型重定义相等性
  • k8s使用glusterfs实现动态持久化存储
  • Spring Batch JSON 支持
  • 阿里云API、SDK和CLI应用实践方案
  • ​flutter 代码混淆
  • #{} 和 ${}区别
  • #70结构体案例1(导师,学生,成绩)
  • #微信小程序(布局、渲染层基础知识)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (苍穹外卖)day03菜品管理
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)WLAN定义和基本架构转
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)3D模板阴影原理
  • *1 计算机基础和操作系统基础及几大协议