如何构建无需依赖VC Redistributables的Qt C++ Windows应用?解决VCRUNTIME140.dll缺失错误
解决Qt C++ Windows应用无需VC Redistributables运行的问题
我之前也碰到过一模一样的问题,弹出VCRUNTIME140.dll缺失本质是因为你的应用默认动态链接了Visual C++运行时库,用户机器上没装VC Redist就会报错。下面给你几个靠谱的解决办法,按优先级排序:
1. 静态链接VC运行时库(最推荐)
这是最直接的方式,把VC运行时的代码直接编译进你的exe里,完全消除对外部VC DLL的依赖。
针对Qt Creator + .pro项目
在你的.pro文件里添加对应编译参数,区分Debug和Release版本:
# Release版本:静态链接多线程VC运行时 CONFIG(release, debug|release): QMAKE_CXXFLAGS += /MT CONFIG(release, debug|release): QMAKE_LFLAGS += /NODEFAULTLIB:MSVCRT # Debug版本:静态链接多线程调试VC运行时(仅用于开发,不要发布Debug版本) CONFIG(debug, debug|release): QMAKE_CXXFLAGS += /MTd CONFIG(debug, debug|release): QMAKE_LFLAGS += /NODEFAULTLIB:MSVCRTD
添加后重新qmake、编译即可。
针对Visual Studio项目
如果是用VS打开的Qt项目,右键项目 -> 属性:
- 转到C/C++ -> 代码生成
- 把运行库选项改成:
- Release模式:
多线程(/MT) - Debug模式:
多线程调试(/MTd)
- Release模式:
- 应用设置后重新编译。
⚠️ 注意:Debug版本的/MTd不能用于正式发布,微软禁止分发调试版的VC运行时组件,只用于本地调试。
2. 静态构建Qt库(彻底单文件)
如果想连Qt的库也一起静态编译进exe,生成真正的单文件应用,可以自己静态构建Qt:
- 下载Qt的源码包(和你当前用的版本一致)
- 打开VS的开发者命令提示符(对应你用的MSVC版本,比如x64 Native Tools Command Prompt)
- 进入Qt源码目录,执行configure命令:
configure -static -release -prefix "D:\Qt\Static\5.15.2" -opensource -confirm-license -skip qtwebengine -skip qtwebview
(-prefix是指定静态Qt的安装路径,-skip可以跳过不需要的模块减少编译时间)
4. 执行nmake和nmake install完成编译安装
5. 在Qt Creator里添加这个静态构建的Qt版本,然后切换到该版本编译你的项目。
⚠️ 注意:如果你的项目用了Qt的LGPL协议,静态链接Qt后需要遵守LGPL条款(比如公开你的应用源码,或者提供让用户重新链接Qt的方式),如果是商业许可证则无此限制。
3. 手动打包VC运行时DLL到程序目录(备选)
如果不想静态链接,也可以把依赖的VC DLL复制到你的exe同目录里:
- 找到你VS安装目录下的VC Redist文件,比如VS2022的路径:
(x64对应64位应用,x86对应32位,版本号根据你的VS版本调整)C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.38.33130\x64\Microsoft.VC143.CRT - 复制该目录下的
vcruntime140.dll、vcruntime140_1.dll、msvcp140.dll(可能还有其他如msvcp140_1.dll等,按需复制)到你的exe所在文件夹。 - 再配合
windeployqt工具打包Qt的依赖库:
这样用户运行exe时就能找到所有依赖了。windeployqt --release your_app.exe
额外注意事项
- 如果你用到了第三方库(比如OpenCV、SQLite等),要确保这些库也是用
/MT(静态VC运行时)编译的,不然还是会带出动态VC依赖。 - 静态链接后exe体积会变大,这是正常现象,因为把运行时代码都打包进去了。
内容的提问来源于stack exchange,提问作者FouLiNuX




