处理丢失 MSVCP140D.dll 的 Visual Studio 设置

Posted

技术标签:

【中文标题】处理丢失 MSVCP140D.dll 的 Visual Studio 设置【英文标题】:Visual Studio setting to deal with missing MSVCP140D.dll 【发布时间】:2018-07-04 19:52:52 【问题描述】:

我的构建计算机与我的目标计算机不同(尽管两者都是 Windows 10)。

我正在使用带有最新更新的 VS2017。

目标机器有MFC:14.12.25810

如何设置我的项目设置,以便我可以针对该版本的 MFC。我不断收到错误消息:缺少 MSVCP140D.dll

当我尝试安装 VS2015 C++ 可再发行组件时,我收到有关版本冲突的错误消息。所以我宁愿停止以 VS2015 为目标,改用 VS2017,或者更好地将可再发行组件包含在我正在安装的文件夹中。

这是我的 VS2017 项目设置:(我也在使用最新的 Windows SDK)。


更新

我设置了静态链接 MFC,它在命令行中添加了开关 /MTd

/permissive- /Yu"stdafx.h" /GS /W3 /Zc:wchar_t /ZI /Gm- /Od /sdl /Fd"x64\Debug\vc141.pdb" /Zc:inline /fp:precise /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MTd /FC /Fa"x64\Debug\" /EHsc /nologo /Fo"x64\Debug\" /Fp"x64\Debug\LinkWareMessageBus.pch" /diagnostics:classic 

但是,现在我在编译时遇到了一堆错误:

严重性代码描述项目文件行抑制状态 警告 LNK4098 defaultlib 'MSVCRTD' 与使用其他库冲突;使用 /NODEFAULTLIB:library LinkWareMessageBus D:\Source\LinkWareMessageBus\LINK 1 严重性代码 描述 项目文件行抑制状态 错误 LNK1120 6 未解决的外部 LinkWareMessageBus D:\Source\LinkWareMessageBus\x64\Debug\LinkWareMessageBus.exe 1 错误 LNK2019 未解析的外部符号 __imp_calloc 在函数 nni_alloc LinkWareMessageBus D:\Source\LinkWareMessageBus\nng.lib(win_thread.c.obj) 1中引用 错误 LNK2019 未解析的外部符号 __imp_rand_s 在函数 nni_plat_seed_prng LinkWareMessageBus D:\Source\LinkWareMessageBus\nng.lib(win_rand.c.obj) 1中引用 错误 LNK2019 未解析的外部符号 __imp_strerror 在函数 nni_plat_strerror LinkWareMessageBus D:\Source\LinkWareMessageBus\nng.lib(win_debug.c.obj) 1中引用 错误 LNK2001 无法解析的外部符号 __imp_strncpy LinkWareMessageBus D:\Source\LinkWareMessageBus\nng.lib(http_server.c.obj) 1 错误 LNK2019 未解析的外部符号 __imp_strncpy 在函数 http_set_header LinkWareMessageBus D:\Source\LinkWareMessageBus\nng.lib(http_msg.c.obj) 1中引用 错误 LNK2019 未解析的外部符号 __imp__beginthreadex 在函数 nni_plat_thr_init LinkWareMessageBus D:\Source\LinkWareMessageBus\nng.lib(win_thread.c.obj) 1中引用 错误 LNK2019 未解析的外部符号 __imp__stricmp 在函数 nni_strcasecmp LinkWareMessageBus D:\Source\LinkWareMessageBus\nng.lib(strs.c.obj) 中引用

我也尝试设置“忽略所有默认库 = 否”,但仍然遇到同样的错误。

这里是LINK命令参数:

/OUT:"D:\Source\LinkWareMessageBus\x64\Debug\LinkWareMessageBus.exe" /MANIFEST /NXCOMPAT /PDB:"D:\Source\LinkWareMessageBus\x64\Debug\LinkWareMessageBus.pdb" /DYNAMICBASE "flatbuffers.lib" "nng.lib" "mswsock.lib" "advapi32.lib" "ws2_32.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /IMPLIB:"nng.lib" /DEBUG /MACHINE:X64 /INCREMENTAL /PGD:"D:\Source\LinkWareMessageBus\x64\Debug\LinkWareMessageBus.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Debug\LinkWareMessageBus.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"D:\Source\LinkWareMessageBus\nng\lib" /LIBPATH:"D:\Source\LinkWareMessageBus\flatbuffers\lib" /TLBID:1 

【问题讨论】:

MSVCP140.dll missing的可能重复 你尝试过静态构建吗? "Use of MFC: Use MFC in a Shared DLL"或者"Use MFC in a Static Library"放到共享库的好处是可以接收安全更新。如果您将共享库安装在自己的目录中,则不会获得任何好处,因此如果您想让事情变得更容易,请使用静态版本。此外,当我处于“发布”模式时,有时我会被甩掉,但它会显示“调试”配置,反之亦然。请注意这一点。 您正在部署应用程序的调试版本(注意 MSVCP140D.dll 的尾随 D)。 MFC 二进制文件的调试版本是 Visual Studio 的一部分,不可再分发。您需要改为部署发布配置。 Fixing the "MSVCP110D.dll is missing from your computer" issue的可能重复 【参考方案1】:

我现在所做的只是使用符号进行发布构建。

https://msdn.microsoft.com/en-us/library/fsk896zz.aspx?f=255&MSPPError=-2147217396

这现在特别有用,因为我正在为其他不喜欢加载我创建的 DLL 的调试版本的软件编写插件。有时您看不到函数的本地堆栈变量,但您始终可以看到成员和实例变量以及参数,所以这对我来说效果最好,然后不必担心像上面这样的 SDK 绑定问题。

【讨论】:

以上是关于处理丢失 MSVCP140D.dll 的 Visual Studio 设置的主要内容,如果未能解决你的问题,请参考以下文章

MSVCP140D.dll 丢失,有啥办法吗? [关闭]

找不到msvcp120dll啥意思

win10msvcp140.dll丢失怎样修复

MSVCP100D.dll 丢失

电脑msvcp140.dll丢失的解决方法?

msvcp140.dll丢失的解决方法_msvcp140.dll丢失怎样修复