Неразрешенный внешний символ LNK2001 __vcrt_initialize при сборке Python3 через vcpkg с пользовательским триплетом ASan C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неразрешенный внешний символ LNK2001 __vcrt_initialize при сборке Python3 через vcpkg с пользовательским триплетом ASan

Сообщение Anonymous »

Я пытаюсь создать зависимости моего проекта (gRPC и Boost) с помощью vcpkg с включенным AddressSanitizer (ASan) в Windows. Для этого я создал собственный триплет с именем x64-windows-asan.cmake.
Однако во время настройки CMake (которая запускает установку vcpkg) сборка завершается с ошибкой при компиляции зависимости python3 (требуемой gRPC).
Среда
  • ОС: Windows 11
  • Компилятор: Visual Studio Enterprise 2022 (версия 17.14.21)
Пользовательский триплет (

Код: Выделить всё

x64-windows-asan.cmake
)

Код: Выделить всё

set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_BUILD_TYPE release)

set(VCPKG_CXX_FLAGS "${VCPKG_CXX_FLAGS} /fsanitize=address")
set(VCPKG_C_FLAGS "${VCPKG_C_FLAGS} /fsanitize=address")
set(VCPKG_LINKER_FLAGS "${VCPKG_LINKER_FLAGS} /fsanitize=address /DEBUG /INCREMENTAL:NO")
Ошибка
Сборка завершается с ошибкой именно на этапе компиляции python3 с 48 ошибками компоновщика. Большинство ошибок указывают на MSVCRT.lib или VCASAN.lib. Типичная ошибка:

Код: Выделить всё

MSVCRT.lib(utility.obj) : error LNK2001: unresolved external symbol __vcrt_initialize [C:\Users\isa\Desktop\vcpkg\buildtrees\python3\x64-windows-asan-rel\PCbuild\python3dll.vcxproj]
Фрагмент vcpkg.json

Код: Выделить всё

{
"builtin-baseline": "af752f21c9d79ba3df9cb0250ce2233933f58486",
"overrides": [
{
"name": "grpc",
"version": "1.71.0#3"
},
{
"name": "boost",
"version": "1.90.0"
}
]
}
Я использую включение ASan только в MSVC (и, в частности, в x64 Arc), поскольку это моя основная среда разработки.
Что я пробовал
  • Проверил, что рабочая нагрузка AddressSanitizer установлена в Visual Studio
  • Настроен VCPKG_BUILD_TYPE Отладка, которая не является поддерживается на основании этой проблемы
  • Установил для VCPKG_LIBRARY_LINKAGE значение статического.
  • Сборка отлично работает с другими конфигурациями, указанными в моем CMakePresets.json (у них нет пользовательского триплета)
Похоже, что существует конфликт между динамическими Связь CRT и библиотек ASan во время процесса сборки python3 в vcpkg. Как мне правильно настроить триплет, чтобы избежать этих неразрешенных символов __vcrt_initialize?

Подробнее здесь: https://stackoverflow.com/questions/798 ... hon3-via-v
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»