1 问题排查
参照 演练:创建和使用自己的动态链接库(C++) 打包后,更换电脑运行报错
由于找不到 MSVCP140D.dll,无法继续执行代码。重新安装程序可能会解决此问题。最开始以为是缺失 VC++ 运行库,但是安装 vc_redist 后问题仍然存在。
动态链接库的名称带 D 后缀,说明为 Debug版本。Release 配置导出的程序应为 MSVCP140.dll。在应用 DLL 的项目中改为 Release 版本生成程序,错误未消失。
打开 开发者命令提示符,使用 dumpbin 检查依赖
dumpbin /dependents 你的主程序.exe检查主程序依赖并不包含 MSVCP140D.dll ,但是使用 dumpbin 检查依赖的自己创建的动态链接库,依赖包含 MSVCP140D.dll。使用 Release 配置重新生成 动态链接库 问题解决。
2 依赖优化
可以通过配置将依赖生成在 exe 内,无需单独安装依赖。
在项目属性页 – 配置属性 – C/C++ – 代码生成,将其中的运行库项改为 多线程(/MT)
重新生成程序,再使用 dumpbin 检查依赖,仅需 KERNEL32.dll。该文件为系统文件,每个软件都会需要。
File Type: EXECUTABLE IMAGE
Image has the following dependencies:
KERNEL32.dll
Summary
3000 .data
1000 .fptable
3000 .pdata
14000 .rdata
1000 .reloc
1000 .rsrc
34000 .text说明执行文件可以直接打开,无需安装环境。