代码之家  ›  专栏  ›  技术社区  ›  Dr.YSG

Visual Studio设置以处理丢失的msvcp140d.dll

  •  1
  • Dr.YSG  · 技术社区  · 7 年前

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

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

    目标机器的mfc:14.12.25810

    如何设置我的项目设置,以便我可以针对该版本的mfc。我一直收到一个错误:缺少msvcp140d.dll

    当我尝试安装VS2015 C++重新分配时,我会遇到冲突版本的错误。所以我宁愿停止针对VS2015,改为VS2017,或者在我安装的文件夹中包含可再发行的。

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

    enter image description here


    更新

    我设置了静态链接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'msvcrdt'与其他lib的使用冲突;使用/nodefaultlib:library linkwaremessagebus d:\source\linkwaremessagebus\link 1
    严重性代码描述项目文件行抑制状态 错误LNK1120 6未解析的外部LinkwareMessageBus d:\source\LinkwareMessageBus\x64\debug\LinkwareMessageBus.exe 1
    错误LNK2019函数NNI alloc linkwaremessagebus d中引用的未解析外部符号imp calloc:\source\linkwaremessagebus\nng.lib(win_thread.c.obj)1
    错误LNK2019在函数NNI plat_seed_prng linkwaremessagebus d:\ source\linkwaremessagebus\nng.lib(win_rand.c.obj)1中引用的未解析外部符号u imp_rand_rand_s
    错误LNK2019未解析的外部符号imp strerror引用于函数nni plat strerror linkwaremessagebus d:\ source\linkwaremessagebus\nng.lib(win_debug.c.obj)1
    错误LNK2001未解析的外部符号uu imp_strncpy linkwaremessagebus d:\source\linkwaremessagebus\nng.lib(http_server.c.obj)1
    错误LNK2019未解析的外部符号u imp_strncpy在函数http_set_header linkwaremessagebus d:\ source\linkwaremessagebus\nng.lib(http_msg.c.obj)1中引用
    错误LNK2019未解析的外部符号u imp_u beginthreadex在函数nni_plat_thr_init linkwaremessagebus d:\ source\linkwaremessagebus\nng.lib(win_thread.c.obj)1中引用
    错误LNK2019在函数NNI strcasecmp linkwaremessagebus d:\ source\linkwaremessagebus\nng.lib(strs.c.obj)中引用的未解析外部符号'uu imp\u stricmp

    我还尝试设置“ignorealldefaultlibraries=no”,但仍然得到相同的错误。

    以下是链接命令参数:

    /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 
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Dr.YSG    6 年前

    我现在所做的只是用符号做发布版本。

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

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