Обновление до универсального CRT-как я могу избавиться от зависимости от vcruntime140.dll и msvcp140.dll? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть проект, который я пытаюсь обновить до универсального CRT, и я все еще вижу зависимость от vcruntime140.dll и msvcp140.dll, которые, я думаю, должны были быть заменены на ucrtbase.dll, а также api-ms-win-crt * dlls.

Я уже проверил этот ответ здесь и это сообщение в блоге , которое объясняет вещи довольно хорошо, но все же не повезло. Вот что я изменил:

  • Набор инструментов платформы: Visual Studio 2019 (v142)
  • Windows Версия SDK: 10.0 (последняя установленная версия)
  • Дополнительно каталоги include: добавлено $ (UniversalCRT_IncludePath)
  • Дополнительные каталоги библиотеки: добавлено $ (UniversalCRT_LibraryPath_x86)

Я также обновил зависимости компоновщика для этого набора:

  • ucrt.lib
  • vcruntime.lib
  • msvcrt.lib
  • user32.lib
  • advapi32.lib
  • Wsock32.lib
  • Crypt32.lib
  • ws2_32.lib

Но когда я запускаю dumpbin / dependents mydll.dll

Тип файла: DLL

Изображение имеет следующие зависимости:

api-ms-win-crt-string-l1-1-0.dll
api-ms-win-crt-heap-l1-1-0.dll
api-ms-win-crt-runtime-l1-1-0.dll
api-ms-win-crt-stdio-l1-1-0.dll
api-ms-win-crt-filesystem-l1-1-0.dll
api-ms-win-crt-convert-l1-1-0.dll
api-ms-win-crt-time-l1-1-0.dll
api-ms-win-crt-environment-l1-1-0.dll
api-ms-win-crt-utility-l1-1-0.dll
VCRUNTIME140.dll
USER32.dll
ADVAPI32.dll
WSOCK32.dll
CRYPT32.dll
WS2_32.dll
MSVCP140.dll
bcrypt.dll
KERNEL32.dll

Сводка

    E000 .data
   66000 .rdata
    E000 .reloc
    1000 .rsrc
  14A000 .text

Есть ли что-то еще, чего мне не хватает, чтобы иметь возможность отбросить зависимость от Speci c CRT версия?

1 Ответ

0 голосов
/ 23 апреля 2020

Я сделал еще несколько копаний и нашел эту страницу , на которой написано следующее:

Начиная с Visual Studio 2015, CRT был реорганизован в новые двоичные файлы. Универсальный CRT (UCRT) содержит функции и глобалы, экспортируемые стандартной библиотекой C99 CRT. UCRT теперь является Windows компонентом и поставляется как часть Windows 10.

Отлично, это то, что я ожидал. Ниже приведено следующее:

Библиотека vcruntime содержит код, специфичный для реализации Visual C ++ CRT, такой как поддержка обработки и отладки исключений, проверки и информация о типах во время выполнения, подробности реализации и некоторые расширенные функции библиотеки. Эта библиотека указывает c на версию используемого компилятора.

Это означает, что все еще существует неуниверсальная зависимость VC ++, которая связывается с VS. Для меня это означает, что DLL без зависимостей на самом деле не существует (по крайней мере, что-то не построенное с VC ++), так как у вас всегда будет зависимость vcruntime.

Всегда есть опция stati c linking (/ MT), но в моем случае я также смотрю на библиотеку DLL с / clr, и эти два параметра являются взаимоисключающими. Локальное развертывание приложения (просто скопируйте vcruntime140.dll с двоичными файлами) также, кажется, работает и может быть лучшим вариантом для того, что я хочу сделать переносимым / xcopy.

Сейчас я собираюсь отметить это как ответ, но если есть способ обойти это, мне было бы интересно увидеть это.

...