QT程序异常结束解决方法

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

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

  1. 重新安装QT;
  2. 检查Qt Creator配置,编译器位数和SDK匹配;
  3. 清理(Clean)和重新构建(Rebuild)项目;
  4. 检查.pro 文件包含的所有必要的依赖文件路径是否正确;
cpp 复制代码
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 的完整路径来加载:
cpp 复制代码
#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();
}

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

cpp 复制代码
#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 来确认所有依赖项都已解决。

相关推荐
橙橙笔记8 小时前
QT安卓软件的制作
android·git·qt·软件
芦芭荞9 小时前
QT使用xml模版生成word文档
xml·qt·word
mengzhi啊9 小时前
qt把结构体数据存入json文件
qt·json
kaixin_learn_qt_ing10 小时前
写入二进制文件(Qt)
qt
尘中远12 小时前
QWT7 的科学 Colormap 色彩评估:QwtColorMapPreset 22 种预设的感知均匀性与场景化选
qt·qwt·科学绘图·科学配色
宿州派大星17 小时前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
长沙红胖子Qt1 天前
Qt+TiePieHS3开发笔记(二):HS3发送器发出内置波形、直连示波器,示波器检测内置波形Demo
qt·示波器·tiepiehs3·发生器·同步发射和示波器采集
陈年老古董1 天前
PyQt5 入门指南:环境搭建、PyCharm 外部工具配置与登录界面实战
开发语言·qt·pycharm
zhanghaha13141 天前
Qt 类完整例程【逐词拆解 + 逐步骤执行保姆教程】
开发语言·qt
Cx330❀1 天前
Qt 界面美化指南:从零掌握 QSS 核心机制与工程实践
开发语言·qt·ui·性能优化·图形渲染