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 来确认所有依赖项都已解决。

相关推荐
Mark Studio3 小时前
QT linux 静态编译问题记录
开发语言·qt
jf加菲猫7 小时前
第1章 认识Qt
开发语言·c++·qt·ui
Wallace Zhang1 天前
QT开发汇总(更新2025.11.12)
qt·pyside6
●VON1 天前
补充说明:Windows 完全可以开发 Qt 鸿蒙应用!(附专属适配方案)
windows·qt·华为·harmonyos·鸿蒙
开始了码1 天前
关于qt运行程序点击几下未响应的原因
开发语言·qt
Kimser1 天前
QT C++ QWebEngine与Web JS之间通信
javascript·c++·qt
QT 小鲜肉1 天前
【QT/C++】Qt样式设置之CSS知识(系统性概括)
linux·开发语言·css·c++·笔记·qt
Main. 241 天前
从0到1学习Qt -- 常见控件QWidget(二)
qt·学习
洛克希德马丁1 天前
Qt配置安卓开发环境
android·开发语言·qt
我要升天!1 天前
QT-- 理解项目文件
开发语言·数据库·qt