Настройка Visual Studio для работы с отсутствующим MSVCP140D.dll - PullRequest
0 голосов
/ 04 июля 2018

Мой компьютер сборки отличается от моего целевого (хотя оба Windows 10).

Я использую VS2017 с последними обновлениями.

Целевая машина имеет MFC: 14.12.25810

Как мне установить настройки моего проекта, чтобы я мог ориентироваться на эту версию MFC. Я получаю сообщение об ошибке: отсутствует MSVCP140D.dll

И когда я пытаюсь установить распространяемый VS2015 C ++, я получаю сообщение об ошибке конфликтующих версий. Поэтому я бы предпочел прекратить нацеливание на VS2015 и перейти на VS2017 или лучше включить распространяемый файл в папку, которую я устанавливаю.

Вот мои настройки проекта VS2017: (Я также использую последнюю версию Windows SDK).

enter image description here


UPDATE

Я установил Static Linked 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: библиотека 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 

1 Ответ

0 голосов
/ 02 сентября 2018

То, что я делаю сейчас, - это просто сборка релизов с символами.

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

Это особенно полезно сейчас, так как я пишу плагины для другого программного обеспечения, которое не любит загружать отладочные версии создаваемых мной DLL. Иногда вы не можете видеть переменные локального стека для функции, но вы всегда можете видеть переменные-члены и экземпляры, а также параметры, так что это лучше всего подходит для меня, и тогда вам не нужно беспокоиться о проблемах привязки SDK, как описано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...