news 2026/4/9 4:42:10

Qt + VS2017 编译缺少库,在对方设备无法运行,推荐几种做法。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt + VS2017 编译缺少库,在对方设备无法运行,推荐几种做法。

如果你的代码使用了 Visual C++ 运行时库(如 msvcp140.dll、vcruntime140.dll、ucrtbase.dll 等),而目标工控机(工业控制计算机)上没有安装对应的运行时环境,那么你的程序在工控机上将无法启动,通常会弹出类似以下错误:
❌ “无法启动此程序,因为计算机中丢失 VCRUNTIME140.dll。”
❌ “由于找不到 MSVCP140.dll,无法继续执行代码。”

✅ 解决方案(按推荐顺序)
✅ 方案一:【推荐】在工控机上安装官方 Visual C++ Redistributable

这是最标准、最安全、最可靠的方式。
步骤:

  1. 根据你的编译器版本下载对应 Redistributable:
    你用的是 Qt 5.12.9 + MSVC2017 → 对应 Visual C++ 2015–2019 Redistributable
  2. 下载地址(微软官方):
    x64 版本(64位系统):
    https://aka.ms/vs/17/release/vc_redist.x64.exe
    x86 版本(32位程序或系统):
    https://aka.ms/vs/17/release/vc_redist.x86.exe
  3. 将安装包拷贝到工控机,以管理员身份运行并安装
  4. 重启(通常不需要,但建议)
    ✅ 优点:系统级安装,所有程序共享,自动更新,无兼容问题
    ⚠️ 注意:工控机可能无网络,需提前下载好离线安装包

✅ 方案二:【次选】将所需 DLL 随程序一起部署(“私有部署”)

如果无法安装 Redistributable(如权限受限、系统锁定),可将运行时 DLL 放在你的 .exe 同目录下。
需要复制的文件(MSVC2017 / v141 工具集):

your_app.exe
├── msvcp140.dll
├── vcruntime140.dll
├── vcruntime140_1.dll (如果用了 C++17/20 新特性)
├── ucrtbase.dll (Universal CRT)
└── concrt140.dll (如果用了并发运行时,如 ppl.h)
如何获取这些 DLL?
路径通常在:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC<版本号>\x64\

C:\Windows\System32\ (但不建议直接从这里拷,可能版本不对)
⚠️ 重要法律与技术限制:
微软允许你随应用程序分发 Redistributable DLL,但必须来自官方 Redist 目录(不能从 System32 拷贝!)
必须遵守 Microsoft Visual C++ 分发许可
ucrtbase.dll 属于 Universal CRT,Windows 10 自带;但在 Windows 7/8 上需额外安装 KB2999226 更新或通过 Redist 安装
推荐做法:
使用 Qt 的 windeployqt 工具,它会自动复制 Qt 依赖,但不会复制 VC++ 运行时。你需要手动补充。

❌ 不推荐的做法:
直接从开发机 System32 拷贝 DLL 到工控机 → 可能版本不匹配、缺少依赖、违反许可
修改程序为静态链接(见下文)→ 有局限性

✅ 方案三:【高级】改用静态链接(/MT)

在编译时将 C/C++ 运行时静态链接进你的 .exe,这样就不依赖外部 DLL。
如何设置(Qt + MSVC):
在 .pro 文件中添加:
qmake

QMAKE_CXXFLAGS_RELEASE += /MT QMAKE_CXXFLAGS_DEBUG += /MTd

/MT:Release 静态链接多线程运行时
/MTd:Debug 静态链接(仅用于调试)
优点:
无需任何 VC++ Redistributable
程序完全独立
缺点:
EXE 体积增大(+1~2MB)
无法接收微软对运行时的安全更新
如果你的程序是 DLL 插件,且主程序用动态链接(/MD),会导致冲突(混合模式问题)
Qt 官方预编译库是 /MD 动态链接 的,你若用 /MT 静态链接,必须自己重新编译整个 Qt
🚫 因此:除非你完全控制整个软件栈,否则不建议对 Qt 程序使用 /MT

🔧 工控机部署检查清单

💡 强烈建议:即使工控机封闭,也尽量说服客户允许安装官方 Redistributable —— 这是微软支持的标准做法,长期维护成本最低。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 8:51:02

基于Web的大学生体测管理系统设计与实现

摘要 随着互联网技术的蓬勃发展&#xff0c;高校体育管理正向信息化、智能化转型。大学生体测管理作为关键一环&#xff0c;传统人工方式已难以满足高效、准确的需求。现有体测管理流程繁琐、数据易出错&#xff0c;且缺乏科学健身指导&#xff0c;影响管理效率与学生体质提升…

作者头像 李华
网站建设 2026/4/8 21:12:05

网络安全学习路线:2025年最新技术趋势与系统化成长路径

【值得收藏】网络安全学习路线&#xff1a;2025年最新技术趋势与系统化成长路径 这篇文章为网络安全学习者提供了一条系统化的六阶段学习路径&#xff0c;从基础准备到专业深耕。文章介绍了三大发展方向、2025年新趋势与热点&#xff0c;并提供科学学习方法和职业发展建议。强…

作者头像 李华
网站建设 2026/4/7 8:40:08

Venera漫画阅读器:8分钟快速入门终极指南

Venera漫画阅读器&#xff1a;8分钟快速入门终极指南 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera Venera是一款基于Flutter框架开发的跨平台漫画阅读应用&#xff0c;为您提供全方位的漫画阅读体验。无论您是漫画爱好者还…

作者头像 李华
网站建设 2026/4/8 10:23:48

DataRoom:零代码构建企业级数据大屏的终极解决方案

DataRoom&#xff1a;零代码构建企业级数据大屏的终极解决方案 【免费下载链接】DataRoom &#x1f525;基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器&#xff0c;具备目录管理、DashBoard设计、预览能力&#xff0c;支持MySQL、Oracle、Post…

作者头像 李华
网站建设 2026/4/7 6:19:31

cq-bot:零基础构建智能QQ机器人的完整指南

cq-bot&#xff1a;零基础构建智能QQ机器人的完整指南 【免费下载链接】cq-bot qq机器人实现端 项目地址: https://gitcode.com/KuroNekovo/cq-bot 在当今数字化社交时代&#xff0c;拥有一个智能QQ机器人已成为社群运营、企业服务和开发者工具的标配。cq-bot作为基于Ja…

作者头像 李华
网站建设 2026/4/8 15:19:56

16、深入探索psad:从签名匹配到主动响应

深入探索psad:从签名匹配到主动响应 1. 基于签名匹配的操作系统指纹识别 psad可以通过将SYN数据包中的TCP选项与p0f签名进行匹配,识别出正在探测iptables防火墙的特定远程操作系统。不过,这一功能需要使用 --log-tcp-options 参数才能实现。因此,在将默认的LOG规则添加…

作者头像 李华