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

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 —— 这是微软支持的标准做法,长期维护成本最低。

http://www.cnnetsun.cn/news/20347.html

相关文章:

  • 窗口管理大师:WindowResizer完整使用指南
  • 20亿参数撬动工业质检革命:Isaac-0.1开启边缘智能新纪元
  • 基于web的超市管理系统开题报告
  • Driver.js 1.x升级攻略:告别旧版,拥抱全新API设计
  • Laudspeaker:终极开源客户参与平台完全指南
  • 20、Snort Options and iptables Packet Filtering
  • 自主之路:中国科技国产化的战略纵深与实践探索
  • 22、深入了解 fwsnort:规则部署、选项及攻击检测实践
  • springboot基于vue的高校师资管理_kn455e4x
  • 不只是LoRA:Llama-Factory全面覆盖主流高效微调方法
  • fflate终极指南:掌握JavaScript高性能压缩解压技术
  • 26、Linux系统桌面环境配置与资源管理指南
  • C++ Primer 中文版高清资源 - 带详细目录的完整学习指南
  • Tabby终极使用手册:从零到精通的完整指南
  • Milkdown终极指南:10分钟快速上手插件化Markdown编辑器
  • Gitee DevOps:信创生态下的企业数字化转型新引擎
  • 终极指南:如何使用Nools规则引擎实现智能决策系统
  • 助力AI+医疗诊断 东软荣获广东省科技进步一等奖
  • COMSOL相控阵超声仿真:phased_array_focus与压力声学模块的mph文件
  • 3分钟掌握VoxCPM:零基础搭建专业级语音克隆系统
  • 国产图数据库:开启数据新“视”界 悦数科技
  • 终极文件管理方案:3步打造专业级云盘系统
  • Python-Skill Bridge:无缝连接Python与Virtuoso的终极解决方案
  • AutoHotkey鼠标自动化终极指南:5分钟解放你的双手
  • reMarkable平板终极管理指南:6款GUI客户端帮你解锁完整生产力
  • 5G赋能全域连接:企业终端管理何以应对“失控”危机?
  • Phi-2模型:5个实用技巧让你快速上手AI文本生成
  • 【Java毕设源码分享】基于springboot+vue的互联网智慧医院体检平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • Windows文件rmclient.dll丢失或损坏问题 下载修复
  • Spring AOP表达式速查手册