Sdílet prostřednictvím


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 do CMakePresets.json souboru konfigurujte volání CMake.
  • MSBuild/Visual Studio: nastavte vlastnost VcpkgAdditionalInstallOptions na --debughodnotu .
  • 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.

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.

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říč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.

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.

Ř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 skriptu bootstrap 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 skriptu bootstrap 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.

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 v vcpkgTools.xmlsouboru 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 v vcpkgTools.xmlsouboru 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 v vcpkgTools.xmlsouboru 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 v vcpkgTools.xmlsouboru 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.