Qt + VS2017 编译缺少库,在对方设备无法运行,推荐几种做法。
2026/5/10 19:36:21 网站建设 项目流程

如果你的代码使用了 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 —— 这是微软支持的标准做法,长期维护成本最低。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询