如何检查C++文件依赖的DLL?VS2017生成的exe运行缺DLL求助
解决Win32控制台应用复制后找不到DLL的问题
这是VS开发C++程序时很常见的依赖问题,我给你几个实用的解决方案:
方案1:切换到Release模式构建(最推荐)
Debug版本的程序默认依赖带调试符号的VC++运行库(文件名通常带d后缀,比如vcruntime140d.dll),这类库只有安装了Visual Studio的电脑才会自带,其他机器没有就会触发找不到DLL的报错。而Release模式使用的是发布版运行库,兼容性好很多:
- 在VS顶部的解决方案配置下拉菜单里,把
Debug改成Release - 右键项目选择
生成(或重新生成) - 去项目目录下的
Release文件夹找到生成的.exe,这个版本的程序基本能直接复制到其他电脑运行(如果是动态链接的Release版,目标电脑若未预装对应VC++ Redistributable,你也可以把发布版运行库DLL和exe一起打包)
方案2:静态链接VC++运行库(Debug/Release都适用)
如果你需要保留Debug版本的调试特性,或者不想依赖任何外部DLL,可以把运行库代码直接编译进exe:
- 右键你的项目,选择
属性 - 在左侧导航栏找到
配置属性 -> C/C++ -> 代码生成 - 找到
运行库选项:- 若当前是Debug配置,把默认的
多线程调试 DLL (/MDd)改成多线程调试 (/MTd) - 若当前是Release配置,把
多线程 DLL (/MD)改成多线程 (/MT)
- 若当前是Debug配置,把默认的
- 点击
确定后重新生成项目
这样生成的exe会把所需运行库打包在内,复制到任何Windows电脑都能直接运行,唯一缺点是exe体积会稍有增大。
方案3:打包调试运行库(仅Debug版本需要)
如果必须分发Debug版本的程序,那得把对应的调试DLL和exe放在一起:
- 打开VS的安装目录,找到调试运行库的存放位置,示例路径:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.16.27012\debug_nonredist\x86\Microsoft.VC141.DebugCRT
(路径里的版本号、x86/x64会根据你的VS安装版本和项目位数有所变化) - 把该文件夹里的
vcruntime140d.dll、msvcp140d.dll、ucrtbased.dll等文件,全部复制到你的exe所在目录 - 现在把exe和这些DLL一起复制到其他电脑,就能正常运行了
注意:如果你的程序还依赖其他第三方库的DLL,也要记得把这些DLL一并打包哦。
内容的提问来源于stack exchange,提问作者Anonymous




