QT步伐异常结束办理方法

农妇山泉一亩田  金牌会员 | 2024-7-11 09:17:51 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 517|帖子 517|积分 1551

在用QT开发第三方SDK的时候,刚开始是运行正常的,但是重装系统之后再次运行步伐总是出现:步伐异常结束。
以下方法尝试无效,但不失为一种排查方法:

  • 重新安装QT;
  • 检查Qt Creator配置,编译器位数和SDK匹配;
  • 清理(Clean)和重新构建(Rebuild)项目;
  • 检查.pro 文件包含的全部必要的依赖文件路径是否正确;
  1. INCLUDEPATH += $$PWD/include
  2. LIBS += $$PWD/lib/XX.lib
复制代码

  • 确保XX.dll 位于步伐的可执行文件所在的目次(release 目次);
后面发现只要调用第三方SDK的库函数就会出现这个问题,如果不调用就正常,所以从排查dll文件入手。
以下几种方法可以排查dll问题:

  • 有些SDK可能依赖特定版本的运行时库。比方,Visual C++ Redistributable。尝试安装后无效。
  • 确保 XX.dll 位于步伐的可执行文件所在的目次( release 目次),大概将其路径添加到系统的 PATH 情况变量中。尝试后无效。
  • 检查SDK是哪种模式:Debug模式和release模式;
  • 确保 XX.dll 及其依赖项具有正确的文件权限。全部相关文件都应具有可读和可执行权限。
  • 尝试利用 DLL 的完备路径来加载:
  1. #include <QCoreApplication>
  2. #include <QDebug>
  3. #include <Windows.h> // 如果使用Windows平台
  4. int main(int argc, char *argv[])
  5. {
  6.     QCoreApplication a(argc, argv);
  7.     // 使用完整路径检查DLL是否加载成功
  8.     HMODULE hModule = LoadLibrary(L"C:\\path\\to\\XX.dll");
  9.     if (!hModule)
  10.     {
  11.         qDebug() << "Failed to load XX.dll";
  12.         return -1;
  13.     }
  14.     qDebug() << "XX.dll loaded successfully";
  15.     return a.exec();
  16. }
复制代码
如果加载失败,查看失败的原因:
  1. #include <QCoreApplication>
  2. #include <QDebug>
  3. #include <Windows.h>
  4. int main(int argc, char *argv[])
  5. {
  6.     QCoreApplication a(argc, argv);
  7.     // 使用完整路径检查DLL是否加载成功
  8.     HMODULE hModule = LoadLibrary(L"C:\\path\\to\\XX.dll");
  9.     if (!hModule)
  10.     {
  11.         DWORD errorMessageID = ::GetLastError();
  12.         LPSTR messageBuffer = nullptr;
  13.         size_t size = FormatMessageA(
  14.             FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
  15.             NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
  16.         QString message = QString::fromLocal8Bit(messageBuffer, size);
  17.         LocalFree(messageBuffer);
  18.         qDebug() << "Failed to load XX.dll:" << message;
  19.         return -1;
  20.     }
  21.     qDebug() << "XX.dll loaded successfully";
  22.     return a.exec();
  23. }
复制代码
可以看到表现:Failed to load XX.dll: "找不到指定的模块。说明dll有依赖的模块没有找到。

  • 下载并安装 Dependency Walkerependency Walker 官方网站
启动 Dependency Walker,打开 XX.dll 文件。检查缺失的依赖项。
Dependency Walker 会列出全部的依赖项及其状态。如果有缺失的依赖项,会表现为赤色的 “X”。记录这些缺失的 DLL 文件。

团结Dependency Walker 的结果,发现缺少WinPcap.dll。我在安装Npcap后不再出现错误。
   WinPcap 已经不再维护,利用 Npcap,是WinPcap替代品。
  如果有别的dll缺失继续安装。重新运行 Dependency Walker 来确认全部依赖项都已办理。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表