VS 2019 编译程序在其它电脑运行报丢失VCRUNTIME140D.dll 【终极解决方案】
Visual Studio 2019 新建控制台项目,直接编译通过,放到其它电脑上(没有安装VS环境),无法运行,报如下错误:
丢失VCRUNTIME140D.dll
解决方案:
在VS工程项目中,设置 属性—>配置属性—>C/C++ —>代码生成—>运行库,Release 选择 多线程(/MT), Debug 选择 多线程调试 (/MTd),如图所示
编译Release 版本,此时如果工程没有依赖其它静态库,一般都能在其它电脑运行。
但是,如果工程中依赖了其它静态库,编译的时候警告 “LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library”,但能编译成功,如下图所示:
看着只是警告,但在其它电脑上依然报错:丢失VCRUNTIME140D.dll,根据提示,设置 属性—>配置属性—>链接器 —>输入—>忽略特定默认库, 填上 LIBCMT.lib(如下图所示),编译时上面的警告消失了,但在其它电脑上依然报错:丢失VCRUNTIME140D.dll,在网上找了一圈,没有任何有用的信息,都是设置多线程(/MT),或者把缺少的dll放在程序同一目录下一起发布(有时确实可以解决上述问题)。我也尝试把依赖的静态库重新编译了一遍,依然无法解决上面的问题。
【终极解决方案】
编译时警告 “LIBCMT”与其他库的使用冲突,这是关键点,那它与什么库冲突呢,答案是:MSVCRTD.lib,而LIBCMT.lib 是我们需要的,那我们换成忽略特定默认库MSVCRTD.lib(如下图所示),编译通过并在其它电脑运行成功。注意这个问题在新版的VS才发现的,旧的VS没有这一问题。