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没有这一问题。

MT:mutithread,多线程库,编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码,即连接LIBCMT.lib库

MTd:mutithread+debug,多线程调试版,连接LIBMITD.lib库

MD:MT+DLL,多线程动态库,连接MSVCRT.lib库,这是个导入库,对应动态库为MSVCRT.dll

MDd: MT+DLL+debug,多线程动态调试库,连接MSVCRTD.lib库,对应动态库为MSVCRTD.dll

 

  • 14
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
当我们在使用VS编译程序时,可能会遇到缺失msvcp140d.dllvcruntime140d.dll和ucrtbased.dll的情况。这些DLL文件是Microsoft Visual C++ Redistributable所需要的运行文件,缺少它们会导致程序无法正常运行。 解决这个问题有以下几种方法: 1. 安装Microsoft Visual C++ Redistributable包:首先,我们可以尝试安装或重新安装最新版本的Microsoft Visual C++ Redistributable包。我们可以在Microsoft官方网站上下载适合我们操作系统的对应版本的运行,然后进行安装。 2. 检查编译选项:另一种方法是检查我们的编译选项是否正确配置。在VS中,我们可以通过以下步骤进行检查和更改:打开项目属性→配置属性→C/C++→代码生成运行,并选择合适的运行选项(如使用动态(DLL)选项)。然后重新编译项目。 3. 复制DLL文件:如果上述方法无效,我们可以尝试手动复制缺失的DLL文件到系统中。首先,我们需要从可运行电脑或者其他程序所在的文件夹中找到这些DLL文件。然后,将这些DLL文件复制到缺失的程序所在的文件夹中,或者复制到Windows的System32文件夹。最后,重新运行程序。 总之,缺失msvcp140d.dllvcruntime140d.dll和ucrtbased.dll的情况是由于缺少Microsoft Visual C++ Redistributable的运行文件所致。我们可以通过安装这个运行包、检查编译选项或手动复制缺失的DLL文件等方法解决这个问题。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值