我的构建计算机与目标计算机不同(尽管两者都是Windows 10)。
我正在使用具有最新更新的VS2017。
目标计算机具有MFC:14.12.25810
如何设置项目设置,以便可以定位到该版本的MFC。我不断收到错误消息:缺少MSVCP140D.dll
当我尝试安装可再发行的VS2015 C ++时,出现有关版本冲突的错误。因此,我宁愿停止将VS2015定位为目标,而改为VS2017,或者最好将可再发行文件包含在我要安装的文件夹中。
这是我的VS2017 Project设置:(我也在使用最新的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
答案 0 :(得分:0)
我现在正在做的只是带有符号的发行版本。
https://msdn.microsoft.com/en-us/library/fsk896zz.aspx?f=255&MSPPError=-2147217396
这现在特别有用,因为我正在为其他不喜欢加载我创建的DLL的调试版本的软件编写插件。有时您看不到某个函数的本地堆栈变量,但是您始终可以看到成员变量和实例变量以及参数,因此这对我来说效果最好,因此不必担心像上面那样的SDK绑定问题。