Устранение неполадок сборки в портах vcpkg
Это руководство предназначено для пользователей с проблемами при установке портов с помощью vcpkg.
Поиск журналов сбоев
Сбои сборки могут произойти по почти бесконечному количеству причин. Если vcpkg не удается создать порт, первым шагом для диагностики причины является чтение файлов журнала.
vcpkg создает файл журнала для каждого внешнего процесса, вызываемого при создании порта. При возникновении ошибки vcpkg выводит расположение файла журнала для последнего процесса, запущенного до возникновения ошибки. Найдите строку "Просмотреть журналы для получения дополнительных сведений": в выходных данных vcpkg.
Пример: выходные данные расположения файлов журнала
See logs for more information:
C:\Users\viromer\work\vcpkg\buildtrees\detect_compiler\config-x64-linux-rel-CMakeCache.txt.log
C:\Users\viromer\work\vcpkg\buildtrees\detect_compiler\config-x64-linux-out.log
Все созданные файлы журнала можно найти, проверяя каталог порта, расположенный в $VCPKG_ROOT/buildtrees/<port>/
(замените <port>
соответствующим именем портаbuildtrees
).
Не удалось скачать ресурсы порта
Примечание.
Использование кэширования ресурсов может помочь устранить такие проблемы, обеспечивая постоянную доступность кэшированных ресурсов.
При установке порта возникает ошибка при скачивании ресурса из сети.
CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:32 (message):
Failed to download file with error: 1
Причина 1. URL-адрес скачивания больше не является допустимым
По причинам, которые не указаны в URL-адресах элементов управления vcpkg, могут стать недопустимыми. Сломанные ссылки можно диагностировать с помощью веб-браузера для перехода по URL-адресу скачивания, неработая ссылка создаст код состояния 404.
Действия по устранению:
1. Измените порт, чтобы использовать альтернативный URL-адрес скачивания для ресурса.
Причина 2. Хэш файла не соответствует ожидаемому SHA512
error: Failed to download from mirror set
error: File does not have the expected hash:
url: https://github.com/OpenImageIO/oiio/archive/v2.4.13.0.tar.gz
File: /home/user/vcpkg/downloads/OpenImageIO-oiio-v2-9325beef.4.13.0.tar.gz.1925416.part
Expected hash: 9325beefce55b66a58fcfc2ce93e1406558ed5f6cc37cb1e8e04aee470c4f30a14483bebfb311c329f7868afb6c508a052661c6b12d819a69f707c1a30cd9549
Actual hash: 9e887c7039995ce7c41556e09a7eed940863260a522ecf7d9bec300189026ed507da560620dfa4a619deeb679be7adf42fe3a7020ff3094df777c7934c771227
Эта ошибка возникает, когда вышестоящий файл был изменен каким-либо образом сервером, но URL-адрес скачивания сохраняется так же. В качестве меры безопасности vcpkg отклонит файлы с SHA512, которые не соответствуют ожидаемому SHA512 для ресурса.
Действия по устранению:
1. Убедитесь, что скачанный файл защищен 2. Измените порт, чтобы использовать SHA512 нового файла.
Цепочка инструментов Visual Studio не найдена
При установке порта vcpkg не удается найти соответствующую цепочку инструментов:
error: in triplet arm-windows: Unable to find a valid toolchain for requested target architecture arm.
The selected Visual Studio instance is at: C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools
The available toolchain combinations are: x86, amd64, x86_amd64, amd64_x86
Причина 1. Соответствующая цепочка инструментов для целевой архитектуры не установлена
Если экземпляр Visual Studio соответствует требуемой версии vcpkg и вы получите эту ошибку, скорее всего, причина заключается в том, что соответствующая цепочка инструментов не установлена.
- Откройте Visual Studio Installer и установите соответствующую цепочку инструментов.
Причина 2. Выбранная версия Visual Studio является неправильной
Если установлен необходимый цепочка инструментов, vcpkg может выбрать неправильную версию Visual Studio, в которой цепочка инструментов не установлена. Дополнительные сведения см. в документации по алгоритму выбора Visual Studio.
Действия по устранению:
1. Установите VCPKG_PLATFORM_TOOLSET
соответствующую версию.
2. Кроме того, задайте нужный VCPKG_VISUAL_STUDIO_PATH
путь установки экземпляра Visual Studio.
Отсутствующие системные зависимости
Необходимое средство сборки или зависимость системы не устанавливается в среде.
Пример. Для порта требуются системные зависимости
alsa currently requires the following programs from the system package manager:
autoconf autoheader aclocal automake libtoolize
On Debian and Ubuntu derivatives:
sudo apt install autoconf libtool
On recent Red Hat and Fedora derivatives:
sudo dnf install autoconf libtool
On Arch Linux and derivatives:
sudo pacman -S autoconf automake libtool
On Alpine:
apk add autoconf automake libtool
Большинство портов vcpkg, требующих системных зависимостей, печатают сообщение во время установки. В некоторых случаях список обязательных системных зависимостей может быть неполным. Диагностика этого типа проблем зависит от базовой встроенной системы, проверьте журналы ошибок, чтобы определить причину сбоя.
Действия по устранению:
1. Выполните необходимые действия для установки отсутствующих системных зависимостей в вашей среде.
Зависимость FetchContent не найдена во время процесса сборки
Сборка завершается ошибкой, так как зависимость выполнена через FetchContent
недоступно во время процесса сборки.
include(FetchContent)
FetchContent_Declare(fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG master
)
FetchContent_MakeAvailable(fmt)
CMake Error at CMakeLists.txt:23 (target_link_libraries):
Target "my_sample_lib" links to:
fmt::fmt
but the target was not found. Possible reasons include:
* There is a typo in the target name.
* A find_package call is missing for an IMPORTED target.
* An ALIAS target is missing.
vcpkg отключает FetchContent
с помощью переменной FETCHCONTENT_FULLY_DISCONNECTED
CMake.
Существует несколько мотивов для отключения этой функции, чтобы назвать несколько:
FetchContent
может скрыть зависимости поставщиков от портов.FetchContent
не работает хорошо с полностью отключенными сценариями.- Зависимости, полученные с помощью
FetchContent
, могут изменять сборку без участия в вычислении хэша ABI.
Для поддержки портов рекомендуется, чтобы любой пакет, приобретенный через FetchContent
, превратился в зависимость vcpkg. Но для общего использования существуют обходные пути для включения FetchContent
.
Действия по устранению:
1. Использование VCPKG_CMAKE_CONFIGURE_OPTIONS
Для задания FETCHCONTENT_FULLY_DISCONNECTED=FALSE
Зависимости, установленные vcpkg, не связаны во время сборки проекта
При создании проекта с помощью режима манифеста или с помощью классического режима зависимости vcpkg не загружаются и не связаны с проектом, что приводит к сбоям сборки.
vcpkg предлагает автоматическую компоновку библиотек и включает каталоги для проектов CMake и MSBuild . Зависимости, установленные через vcpkg, должны быть доступны автоматически для использования в проекте.
Причина 1. Необходимые зависимости не установлены
Действия по устранению:
1. Убедитесь, что зависимости проекта готовы:
Если вы используете файл манифеста (vcpkg.json
), убедитесь, что файл находится в том же каталоге, где содержится CMakeList.txt
файл. Кроме того, убедитесь, что все зависимости перечислены в поле манифеста "dependencies"
. vcpkg автоматически установит зависимости в манифесте при сборке проекта.
Если вы используете интерфейс командной строки vcpkg для установки пакетов в классическом режиме, убедитесь, что все необходимые зависимости предварительно установлены перед запуском сборки проекта. vcpkg не устанавливает пакеты, необходимые проекту при использовании в классическом режиме.
Причина 2. Интеграция для системы сборки не включена
CMake.
Действия по устранению:
1. Задайте CMAKE_TOOLCHAIN_FILE
переменную цепочке инструментов vcpkg.
Необходимо CMAKE_TOOLCHAIN_FILE
задать для указания на файл цепочки инструментов Vcpkg CMake, расположенный в {VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
папке , обязательно замените {VCPKG_ROOT}
правильный путь к каталогу установки vcpkg.
Для задания цепочки инструментов можно использовать любой из следующих методов:
CMakePresets.json
Использование файла:- Если
toolchainFile
вы используете версию 3 или более позднюю. - Задайте значение
CMAKE_TOOLCHAIN_FILE
, если вы используетеcacheVariable
версию 2 или более раннюю версию.
- Если
- Передача
-DCMAKE_TOOLCHAIN_FILE={VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
аргумент командной строки во время вызова CMake. - Задайте
CMAKE_TOOLCHAIN_FILE
вCMakeList.txt
файле. Убедитесь, что эта переменная задана перед любым вызовомproject()
.
Если вы уже используете пользовательский файл цепочки инструментов с помощью CMAKE_TOOLCHAIN_FILE
, установите VCPKG_CHAINLOAD_TOOLCHAIN_FILE
с помощью настраиваемого триплета , чтобы указать на цепочку пользовательских инструментов.
MSBuild
vcpkg предоставляет глобальный механизм интеграции с помощью vcpkg integrate install
команды.
Когда команда выполняется один раз, интеграция vcpkg становится включенной для всех проектов с помощью MSBuild, с режимом манифеста или классическим режимом.
Эта интеграция связана с экземпляром vcpkg, из которого была выполнена команда, поэтому если у вас несколько экземпляров vcpkg, в проектах доступны только версия средства и пакеты, установленные в этом конкретном экземпляре.
Ознакомьтесь с документацией по интеграции MSBuild, чтобы узнать, как включить интеграцию vcpkg для одного проекта или решения.
Действия по устранению:
1. Запуск vcpkg integrate install
для экземпляра vcpkg, который требуется использовать
Запустите vcpkg integrate install
, чтобы включить глобальную интеграцию с MSBuild. Это необходимо сделать только один раз, чтобы экземпляр vcpkg был включен для всех проектов.
Не удается установить пакеты с помощью классического режима
Выполнение команды завершается ошибкой vcpkg install
со следующим сообщением:
error: Could not locate a manifest (vcpkg.json) above the current working directory.
This vcpkg distribution does not have a classic mode instance.
Причина 1. Использование встроенной копии vcpkg в Visual Studio
Visual Studio 2022 включает копию vcpkg, устанавливаемую с помощью рабочего процесса C++. Этот пакет vcpkg устанавливается в расположении только для чтения, и таким образом не может использоваться в классическом режиме.
Вы используете встроенный терминал Visual Studio или PowerShell для разработчика VS, который имеет копию упаковаемого vcpkg в своем PATH.
Действия по устранению:
1. Создайте файл манифеста (vcpkg.json
) для установки зависимостей проекта.
2. Если у вас есть автономный экземпляр vcpkg, его можно использовать, задав VCPKG_ROOT
переменную и добавив путь установки в PATH
переменную.
$env:VCPKG_ROOT="path/to/standalone/vcpkg"
$env:PATH="$env:PATH;$env:VCPKG_ROOT"
Проблема не указана здесь
Если проблема не указана здесь, посетите наш репозиторий , чтобы создать новую проблему.