Průvodce odstraňováním potíží s binárním ukládáním do mezipaměti
Tato příručka je určená pro uživatele, kteří mají problémy s binárním ukládáním do mezipaměti.
Povolení informací o ladění vcpkg
Důrazně doporučujeme povolit výstup ladění při sledování tohoto průvodce.
- Klasický režim: Přidejte
--debug
do vyvolání příkazu. - Sada nástrojů CMake: Přidejte
-DVCPKG_INSTALL_OPTIONS="--debug"
do souboru volání nebo doCMakePresets.json
souboru konfigurujte volání CMake. - MSBuild/Visual Studio: nastavte vlastnost
VcpkgAdditionalInstallOptions
na--debug
hodnotu . - Proměnnou prostředí
VCPKG_INSTALL_OPTIONS
nastavte na--debug
.
Selhání nabízení nuGet do {url}
Důležité
Aktualizujte nástroj vcpkg na nejnovější verzi. Kromě toho povolte výstup ladění pro komplexní protokoly chyb.
Při použití binárního zdroje NuGet se zobrazí následující chyba:
Pushing NuGet to {url} failed. Use --debug for more information.
Při použití binárního zdroje konfiguračního souboru NuGet se zobrazí následující chyba:
Pushing NuGet config to {url} failed. Use --debug for more information.
K této chybě dojde, když se vcpkg pokusí a nepodaří se použít příkazový řádek NuGet k nahrání balíčků do informačního kanálu NuGet.
Příčina 1: Nedostatečná oprávnění k zápisu uživatele
Zobrazí se následující chybová zpráva:
System.Net.Http.HttpRequestException: Response status code does not indicate success: 403 (Forbidden - User <user> lacks permission to complete this action. You need to have 'AddPackage'.
Nabízená oznámení byla odmítnuta vzdáleným zdrojem, protože uživatel nemá dostatečná oprávnění k zápisu.
- Ověřte, že má uživatel nebo skupina uživatelů oprávnění k zápisu. V NuGetu musí být uživatel alespoň rolí přispěvatele informačního kanálu.
Příčina 2: Chybně nakonfigurovaná adresa URL informačního kanálu NuGet
Může se zobrazit chyba:
System.Net.Http.HttpRequestException: Response status code does not indicate success: 405 (Method Not Allowed).
Server odmítl požadavek NuGet push, protože nerozpoznal metodu požadavku.
- Ověřte, zda je identifikátor URI ve vašem binárním zdroji správný a že směruje na index služby informačního kanálu, obvykle
<feed base url>/nuget/v3/index.json
.
Další prostředky NuGet
Pokyny k připojení a publikování v informačním kanálu NuGet najdete v dokumentaci NuGet.
Chyby nahrávání do mezipaměti
Důležité
Aktualizujte nástroj vcpkg na nejnovější verzi. Kromě toho povolte výstup ladění pro komplexní protokoly chyb.
Při nahrávání binárního balíčku do mezipaměti dojde k chybám.
Příčina 1: Nepodařilo se nahrát zprostředkovatele binární mezipaměti
Nahrávání může selhat z různých důvodů a chybové zprávy jsou obvykle specifické pro poskytovatele.
- Ujistěte se, že jste ověřeni v mezipaměti. Různí poskytovatelé se ověřují odlišně.
- Zkontrolujte, jestli jste pro mezipaměť zadali správný identifikátor URI.
- Pokud jako binární zdroj používáte NuGet, projděte si řešení potíží s nabízenými oznámeními .
- Projděte si dokumentaci nebo průvodce odstraňováním potíží konkrétního poskytovatele.
Prázdná binární mezipaměť
Důležité
Aktualizujte nástroj vcpkg na nejnovější verzi. Kromě toho povolte výstup ladění pro komplexní protokoly chyb.
Přestože nedošlo k žádným chybám a instalace vcpkg proběhla úspěšně, binární mezipaměť zůstane prázdná. Pokud jste zaznamenali chyby, projděte si nabízené řešení potíží s NuGetem a nahrajte řešení potíží s jinými poskytovateli.
Příčina 1: Vcpkg nemá oprávnění k zápisu do binární mezipaměti
Ve výstupu chybí následující zpráva.
Uploading binaries for 'rapidjson:x64-windows' to <binary source> source <url>.
Stored binaries in 1 destinations in 1.5 s.
vcpkg přeskočil nahrání binárního balíčku do binární mezipaměti.
- Ujistěte se, že je vaše konfigurace binární mezipaměti nastavená na
write
readwrite
Knihovny se znovu sestaví místo použití vzdálené binární mezipaměti
Důležité
Aktualizujte nástroj vcpkg na nejnovější verzi. Kromě toho povolte výstup ladění pro komplexní protokoly chyb.
Systém znovu sestaví knihovny místně, i když je požadovaný binární balíček k dispozici ve vzdálené binární mezipaměti.
Ve výstupu chybí následující zpráva.
Restored 1 package(s) from <remote binary cache> in 1.1 s. Use --debug to see more details.
Příčina 1: Vcpkg nemá oprávnění ke čtení ze vzdálené binární mezipaměti
vcpkg zvolte čtení výchozí binární mezipaměti přes vzdálené mezipaměti.
- Ujistěte se, že je vaše konfigurace binární mezipaměti nastavená na
read
readwrite
Příčina 2: Vzdálená binární mezipaměť je prázdná.
Vzdálená mezipaměť by měla obsahovat seznam binárních balíčků, které jste odeslali.
- Přečtěte si část s prázdnou binární mezipamětí .
Příčina 3: Rozdíly mezi místním a vzdáleným prostředím sestavení
Každý balíček v binární mezipaměti je označen hodnotou hash ABI, která obsahuje verze kompilátoru, zdroje a další informace pro rozlišení mezi binárními balíčky. Pokud místně vypočítaná hodnota hash ABI neodpovídá hodnotě uložené vzdáleně, balíček se nenačte.
- Pokud chcete zjistit původní příčinu, projděte si průvodce odstraňováním potíží s neshodou hodnot hash ABI.
Neočekávané nebo časté opětovné sestavení knihovny
Důležité
Aktualizujte nástroj vcpkg na nejnovější verzi. Kromě toho povolte výstup ladění pro komplexní protokoly chyb.
V nezměněném prostředí a bez aktualizace vcpkg se stále znovu sestavují knihovny occassionally.
Příčina 1: Nezjištěné změny v prostředí sestavení
Každý balíček v binární mezipaměti je označen hodnotou hash ABI, která obsahuje verze kompilátoru, zdroje a další informace pro rozlišení mezi binárními balíčky. Pokud místně vypočítaná hodnota hash ABI neodpovídá hodnotě uložené vzdáleně, balíček se nenačte.
- Pokud chcete zjistit původní příčinu, projděte si průvodce odstraňováním potíží s neshodou hodnot hash ABI.
Řešení potíží s neshodou hodnot hash ABI
Důležité
Aktualizujte nástroj vcpkg na nejnovější verzi. Kromě toho povolte výstup ladění pro komplexní protokoly chyb.
Tato příručka je určená uživatelům k diagnostice, proč mají různé hodnoty hash ABI pro dva identické binární balíčky.
Porovnání dvou binárních balíčků
Určení rozdílu mezi dvěma identickými pojmenovanými balíčky vyžaduje porovnání různých dat: zdrojů, verzí nástrojů, kompilátorů a cílových platforem. Hodnota hash ABI poskytuje stručné znázornění těchto dat. Při výpočtu hodnoty hash ABI vcpkg bere v úvahu všechna relevantní data, včetně obsahu souborů, verzí nástrojů a podrobností o systému. Vytvoří hodnotu hash pro každý datový bod a pak tyto hodnoty hash zkombinuje do jedné hodnoty binárního balíčku.
Porovnání hodnot hash ABI binárního balíčku
Hodnota hash ABI knihovny zlib je bb1c96759ac96102b4b18215db138daedd3eb16c2cd3302ae7bffab2b643eb87
:
[DEBUG] Trying to hash <path>\buildtrees\zlib\x86-windows.vcpkg_abi_info.txt
[DEBUG] <path>\buildtrees\zlib\x86-windows.vcpkg_abi_info.txt has hash bb1c96759ac96102b4b18215db138daedd3eb16c2cd3302ae7bffab2b643eb87
Pokud se hodnota hash mezi spuštěními pro stejnou knihovnu změní, znamená to, že tyto dva balíčky jsou odlišné.
Porovnání hodnot hash ABI verze kompilátoru
Ověřte, jestli se mezi spuštěními změnila verze kompilátoru.
[DEBUG] -- The C compiler identification is MSVC 19.36.32538.0
[DEBUG] -- The CXX compiler identification is MSVC 19.36.32538.0
[DEBUG] #COMPILER_HASH#f5d02a6542664cfbd4a38db478133cbb1a18f315
Hodnota hash kompilátoru je f5d02a6542664cfbd4a38db478133cbb1a18f315
.
Porovnání hodnot hash ABI
Porovnejte položky ABI pro každý balíček. Položka představuje část informací, která přispívá k konečné hodnotě hash.
[DEBUG] <abientries for zlib:x86-windows>
[DEBUG] 0001-Prevent-invalid-inclusions-when-HAVE_-is-set-to-0.patch|750b9542cb55e6328cca01d3ca997f1373b9530afa95e04213168676936e7bfa
[DEBUG] 0002-skip-building-examples.patch|835ddecfed752e0f49be9b0f8ff7ba76541cb0a150044327316e22ca84f8d0c2
[DEBUG] 0003-build-static-or-shared-not-both.patch|d6026271dcb3d8fc74b41e235620ae31576a798e77aa411c3af8cd9e948c02b1
[DEBUG] 0004-android-and-mingw-fixes.patch|37a43eddbcb1b7dde49e7659ae895dfd0ff1df66666c1371ba7d5bfc49d8b438
[DEBUG] cmake|3.26.2
[DEBUG] features|core
[DEBUG] portfile.cmake|ac63047b644fa758860dd7ba48ff9a13b058c6f240b8e8d675b8fbba035976be
[DEBUG] ports.cmake|5a8e00cedff0c898b1f90f7d129329d0288801bc9056562b039698caf31ff3f3
[DEBUG] post_build_checks|2
[DEBUG] powershell|7.3.6
[DEBUG] triplet|x86-windows
[DEBUG] triplet_abi|3e71dd1d4afa622894ae367adbbb1ecbd42c57c51428a86b675fa1c8cad3a581-36b818778ba6f2c16962495caedb9a7b221d5be4c60de1cd3060f549319a9931-f5d02a6542664cfbd4a38db478133cbb1a18f315
[DEBUG] usage|be22662327df993eebc437495add75acb365ab18d37c7e5de735d4ea4f5d3083
[DEBUG] vcpkg-cmake|1b3dac4b9b0bcbef227c954b495174863feebe3900b2a6bdef0cd1cf04ca1213
[DEBUG] vcpkg-cmake-wrapper.cmake|5d49ef2ee6448479c2aad0e5f732e2676eaba0411860f9bebabe6002d66f57d1
[DEBUG] vcpkg.json|bc94e2540efabe36130a806381a001c57194e7de67454ab7ff1e30aa15e6ce23
[DEBUG] vcpkg_copy_pdbs|d57e4f196c82dc562a9968c6155073094513c31e2de475694143d3aa47954b1c
[DEBUG] vcpkg_fixup_pkgconfig|588d833ff057d3ca99c14616c7ecfb5948b5e2a9e4fc02517dceb8b803473457
[DEBUG] vcpkg_from_git|8f27bff0d01c6d15a3e691758df52bfbb0b1b929da45c4ebba02ef76b54b1881
[DEBUG] vcpkg_from_github|b743742296a114ea1b18ae99672e02f142c4eb2bef7f57d36c038bedbfb0502f
[DEBUG] vcpkg_replace_string|d43c8699ce27e25d47367c970d1c546f6bc36b6df8fb0be0c3986eb5830bd4f1
[DEBUG] </abientries>
Poznámka:
Položka triplet_abi
obsahuje tři hodnoty hash: hodnotu hash obsahu x86-windows
souboru tripletu, windows.cmake
sadu nástrojů a hodnotu hash kompilátoru. Tyto hodnoty hash by se změnily, pokud jste se rozhodli cílit na jinou platformu.
Neshoda 1: Soubory portů
Mezi soubory portů patří skripty portů (portfile.cmake
, vcpkg.json
), soubory oprav (*.patch
) nebo jakýkoli jiný soubor v adresáři portů: ports/<library>/*
.
Příčina 1: CI nebo kanál aktualizoval registr portů
Před spuštěním vcpkg ve vaší CI naklonoval nejnovější úložiště vcpkg.
- Při použití
git clone https://github.com/microsoft/vcpkg
skriptubootstrap
nezapomeňte provést rezervaci na konkrétní potvrzení. - Zvažte přidání vcpkg jako dílčího modulu Gitu do projektu.
Příčina 2: GitHub Actions aktualizoval vcpkg
Používáte systémovou kopii vcpkg, kterou poskytuje GitHub Actions, která byla aktualizována.
- Naklonujte vlastní kopii vcpkg.
- Zvažte vytvoření dílčího modulu Git vcpkg v projektu.
Neshoda 2: pomocné funkce nástroje CMake vcpkg
Pomocné funkce CMake se nacházejí v adresáři skriptů: scripts/*
a obvykle začínají na vcpkg_
.
Příčina 1: Pomocné skripty s aktualizací CI nebo kanálu
Před spuštěním vcpkg ve vaší CI naklonoval nejnovější úložiště vcpkg.
- Při použití
git clone https://github.com/microsoft/vcpkg
skriptubootstrap
nezapomeňte provést rezervaci na konkrétní potvrzení. - Zvažte přidání vcpkg jako dílčího modulu Gitu do projektu.
Příčina 2: GitHub Actions aktualizoval vcpkg
Používáte systémovou kopii vcpkg, kterou poskytuje GitHub Actions, která byla aktualizována.
- Naklonujte vlastní kopii vcpkg.
- Zvažte vytvoření dílčího modulu Git vcpkg v projektu.
Neshoda 3: Verze kompilátoru
vcpkg znovu sestaví vaše závislosti s jinou verzí kompilátoru.
Příčina 1: Kompilátor jazyka Visual Studio C++ se automaticky aktualizoval.
Visual Studio automaticky aktualizovalo úlohu jazyka C++, včetně kompilátoru, mezi spuštěními. I aktualizace podverze způsobí opětovné sestavení sady knihoven vcpkg.
- Zakažte automatické aktualizace kompilátoru.
Příčina 2: Knihovna byla postavena na jiném počítači než na počítači použitém k jeho využití.
Jeden počítač vytvořil a publikoval binární balíček do vzdálené mezipaměti. Jiný počítač obvykle používaný pro vývoj spotřeboval knihovnu uloženou v mezipaměti.
- Použijte stejnou verzi kompilátoru C++ místně jako na vzdáleném počítači. Pro Visual Studio zvažte bootstrapper s pevnou verzí.
- Znovu sestavte závislosti místně pro účely vývoje. Otestujte a vyřešte problémy později během kontinuální integrace.
Příčina 3: Místní image aktualizovala kompilátor.
Základní image, kterou jste použili k sestavení závislostí vcpkg, se změnila, což aktualizovalo verzi kompilátoru.
- Připnout na stabilní a verzi image. Ujistěte se, že nenačítáte nejnovější image, takže mezi spuštěními neaktualizuje automaticky podkladové nástroje ani kompilátory.
- Pokud potřebujete image často aktualizovat, připněte nástroje kompilátoru C++ na konkrétní verzi při vytváření image.
Příčina 4: Hostované spouštěče GitHubu aktualizovaly podkladový kompilátor.
Hostované spouštěče GitHubu každý týden aktualizují kompilátory a nástroje.
- V současné době neexistuje způsob, jak opravit image a zabránit pravidelné aktualizaci nástrojů a verze kompilátoru. Alternativní řešení najdete v části s dalšími možnostmi .
Neshoda 4: Verze nástrojů se mezi spuštěními změnila.
Verze nástrojů používaných k sestavení knihoven, CMake nebo PowerShellu se mezi spuštěními změnila.
Příčina 1: Sada Visual Studio se automaticky aktualizovala.
Sada Visual Studio se mezi spuštěními automaticky aktualizovala, včetně všech nástrojů. I aktualizace podverze způsobí opětovné sestavení sady knihoven vcpkg.
- Zakažte automatické aktualizace sady Visual Studio.
- Přidejte
--x-abi-tools-use-exact-versions
do vyvolání vcpkg. Tím se opraví ABI vašich nástrojů na základě verze vvcpkgTools.xml
souboru vcpkg, v případě potřeby načte vlastní kopii.
Příčina 2: Knihovna byla postavena na jiném počítači než na počítači použitém k jeho využití.
Jeden počítač vytvořil a publikoval binární balíček do vzdálené mezipaměti. Jiný počítač obvykle používaný pro vývoj spotřeboval knihovnu uloženou v mezipaměti.
- Použijte stejné verze nástrojů místně jako na vzdáleném počítači.
- Znovu sestavte závislosti místně pro účely vývoje. Otestujte a vyřešte problémy později během kontinuální integrace.
- Přidejte
--x-abi-tools-use-exact-versions
do vyvolání vcpkg. Tím se opraví ABI vašich nástrojů na základě verze vvcpkgTools.xml
souboru vcpkg, v případě potřeby načte vlastní kopii.
Příčina 3: Image v místním prostředí aktualizovala nástroje.
Základní image, kterou jste použili k sestavení závislostí vcpkg, se změnila, což byly verze všech použitých nástrojů.
- Připnout na stabilní a verzi image. Ujistěte se, že nenačítáte nejnovější image, takže mezi spuštěními automaticky neaktualizuje podkladové nástroje.
- Pokud potřebujete image často aktualizovat, připněte při vytváření image všechny relevantní nástroje na konkrétní verzi.
- Přidejte
--x-abi-tools-use-exact-versions
do vyvolání vcpkg. Tím se opraví ABI vašich nástrojů na základě verze vvcpkgTools.xml
souboru vcpkg, v případě potřeby načte vlastní kopii.
Příčina 4: Hostované spouštěče GitHubu aktualizovaly základní nástroje.
Hostované spouštěče GitHubu každý týden aktualizují kompilátory a nástroje.
- Přidejte
--x-abi-tools-use-exact-versions
do vyvolání vcpkg. Tím se opraví ABI vašich nástrojů na základě verze vvcpkgTools.xml
souboru vcpkg, v případě potřeby načte vlastní kopii.
Další možnosti
Pokud výše uvedené možnosti nefungují, zvažte následující alternativní řešení:
- Slouží
vcpkg export
k vytvoření samostatného archivu závislostí místo jejich obnovení z manifestu. - Zvažte použití místní image Dockeru k sestavení knihoven.
- Běžte pomocnou kontinuální integrací, která vytváří knihovny vcpkg v pravidelném tempu (např. denně nebo týdně).
Problém tu není uvedený
Pokud tady váš problém není uvedený, navštivte naše úložiště a vytvořte nový problém.